SSH कनेक्शन खुला है या नहीं, इसकी जांच कैसे करें?


5

मैं public.sigmadesigns.com साइट से जुड़ने का प्रयास कर रहा हूं । वास्तव में मैं उस सर्वर को अपनी RSA सार्वजनिक कुंजी भेजकर अधिकृत किया गया था। लेकिन अब जब मैं करने की कोशिश करता हूं repo, मुझे मिलता है:

Getting manifest ...
   from sigma@public.mipsandroid.com:mipsandroid/platform/manifest.git
ssh: connect to host public.mipsandroid.com port 22: Connection refused
ssh: connect to host public.mipsandroid.com port 22: Connection refused
fatal: The remote end hung up unexpectedly
fatal: cannot obtain manifest sigma@public.mipsandroid.com:mipsandroid/platform/manifest.git

चूंकि मैं एक कॉर्पोरेट प्रॉक्सी नेटवर्क के अंदर हूं, इसलिए मैं जानना चाहूंगा कि इस आईपी तक मेरी पहुंच खुली है या नहीं। मैं इसे कैसे जांच सकता हूं?

जवाबों:


2

मेरे ~ / .bashrc और ~ / .shshrc (पूरी तरह से POSIX संगत, आपकी शेल स्क्रिप्ट के लिए तैयार) से कुछ कार्यों का सरलीकृत संस्करण:

# true if we have the given command(s)
we_have() { type "$@" >/dev/null 2>&1; }

# Usage: probe SERVER PORT|SERVICE
# returns true when SERVER has PORT opened (and responds within one second)
if we_have nc
  then probe() { nc -zw1 "$@" >/dev/null 2>&1; }
  else probe() { echo X |telnet -e X "$@" >/dev/null 2>&1; }
fi

# Usage: poke SERVER [PORT|SERVICE]
# As probe.  Also: PORT defaults to 80 (http) and reports the result
poke() {
  local RETVAL STATUS
  probe "$1" "${2:-80}"
  RETVAL=$?
  if [ $RETVAL != 0 ]; then
    STATUS=" not"
  fi
  echo "could$STATUS connect to port ${2:-80} on host '$1'"
  return $RETVAL
}

यह पोर्ट नंबर और किसी भी सेवा के नाम को अनुक्रमित करता है /etc/services। (इसका परीक्षण करने के लिए सावधान रहें; यदि आपका सेवा एक खराब सेवा नाम के कारण विफल हो जाता है, तो आपको पता नहीं चलेगा।)

कुछ उदाहरण परीक्षण:

$ poke localhost ssh
could connect to port ssh on host 'localhost'
$ poke localhost 12345
could not connect to port 12345 on host 'localhost'

का प्रयोग करें probeबस वापसी मान, जैसे के साथ स्क्रिप्ट कुछ करने के लिए अगर आप चाहते हैं

if probe localhost ssh; then
  echo something contingent on hosting ssh goes here
fi

यदि आपके पास nmapसंस्करण 5+ स्थापित है, तो आप कमांड के ncat --send-only --recv-only -w 334ms $1 $2बजाय उपयोग कर सकते हैं nc। यह तेजी से विफल होता है (मैं 334ms पर बस गया हूं। एनसी केवल-दूसरे रिज़ॉल्यूशन की अनुमति देता है, इसलिए आप पूर्ण सेकंड की प्रतीक्षा कर रहे हैं)।


ध्यान दें कि यह सत्यापित नहीं करता है कि क्या होस्ट किया जा रहा है, केवल यह कि पोर्ट खुला है। 99% समय, यह काफी अच्छा है। यदि आपको इससे अधिक की आवश्यकता है, तो कुछ इस तरह से प्रयास करें:

nmap -sV -p ssh localhost |grep -qi 'open.*ssh.*ssh[^?]'

यह सर्वर लोकलहोस्ट पर पोर्ट ssh (22) को स्कैन करने और सर्विस / वर्जन की जानकारी निर्धारित करने के लिए नैम्प को बताएगा । मेरे सिस्टम पर, बिना grep के, यह रिपोर्ट करता है:

Starting Nmap 6.40 ( http://nmap.org ) at 2014-02-14 17:01 PST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000048s latency).
Other addresses for localhost (not scanned): 127.0.0.1
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 6.4p1 Debian 2 (protocol 2.0)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 0.24 seconds

इसलिए grep कमांड SSH के पहले उदाहरण को देख रहा है (जो केवल होस्टिंग सर्वर और संस्करण जानकारी में मैपिंग / इन / सर्विसेज को इंगित करता है), जो "ssh" (केस-इनसेंसिटिव) से मेल खाना चाहिए। -qझंडा केवल उत्पादन को दबा (तो यह जगह ले सकता है probe)। अगर नैंप यह पता नहीं लगा सकता है कि सेवा क्या है, तो यह कहेगा ssh?, इसलिए grep regex मेल खाने से बचता है।

आइए उन्हें मिलाते हुए इसे तेजी से बनाते हैं लेकिन अभी भी यह सत्यापित करते हैं कि एसएसएच वास्तव में परोसा जा रहा है:

# Usage: vet_ssh SERVER [PORT|SERVICE]
# True when SERVER has PORT (default=22) both opened and serving SSH
vet_ssh() {
  probe $1 ${2:-22} && nmap -sV -p ${2:-22} $1 |grep -qiE 'open.....*ssh[^?]'
}

अब आप अपने फ़ंक्शन के vet_sshस्थान पर उपयोग कर सकते हैं । यह लगभग मेरे मूल कार्य की तरह तेज़ होगा : पोर्ट के न खुलने पर यह समान गति वाला होता है, पोर्ट के खुलने और एसएसएच की सेवा करने पर यह थोड़ा धीमा होता है, और खुले तौर पर धीमा होने पर यह कुछ धीमा हो जाता है और कुछ परोसते हुए नैम जल्दी पहचान नहीं पाता ( या सभी)। वैकल्पिक बंदरगाहों को समायोजित करने के लिए यहाँ grep regex थोड़ा अलग है।probepokepoke


इस घटना में कि मैंने आपके प्रश्न की पूरी तरह से गलत व्याख्या की है ... यदि आप जानना चाहते हैं कि क्या आप पहले से ही इस सर्वर से जुड़े हैं (इसके बजाय कि आप कर सकते हैं या नहीं ), तो netstatइस तरह से उपयोग करें:

# Usage: am_i_sshed_to SERVER [PORT|SERVICE]
# True when you have an established connection to SERVER on PORT (default=22)
am_i_sshed_to() {
  local IP_QUERY=`host "$1" |awk -v port="${2:-22}" '
    $2 != "mail" { printf "-e %s:%s ", $NF, port }
  '`
  netstat -tn |grep -w $IP_QUERY |grep -wq ESTABLISHED
}

फिर आप am_i_sshed_toउसी तरीके से probeया के रूप में उपयोग कर सकते हैं vet_ssh

(स्पष्टीकरण: netstatप्रत्येक पते को देखने के लिए वास्तव में लंबा समय लगता है। हमें केवल उसी सर्वर की खोज करने की आवश्यकता है जिसे हम जांचना चाहते हैं, इसलिए हमें पहली पंक्ति में कैश awkकरना होगा । कमांड का कहना है कि मेल डिलीवरी पर चर्चा नहीं करने वाली किसी भी पंक्ति को समाप्त होना चाहिए ( $NFआईपी ​​में)। कि हमारे आगामी netstat कॉल के लिए एक grep क्वेरी, तो 1.2.3.4जैसे हो जाता है -e 1.2.3.4:22और हम कई आईपी (हम आदेश लाइन आकार सीमा से पहले कुछ सौ तक) हो सकता है। तो, हम netstat चलाते हैं, केवल TCP देख रहे हैं। कनेक्शन और एक नाम के लिए कुछ भी मैप नहीं कर रहे हैं। हम अपने कैश्ड क्वेरी के खिलाफ शब्दों के लिए grep ("11.2.3.4:22" या "1.2.3.4:2234" से मेल नहीं खाते) (नोटों की जानबूझकर कमी, हमें ज़रूरत नहीं है उन्हें और वे तर्क संरचना को बदल देंगे!) और फिर सुनिश्चित करें कि कनेक्शन अभी भी स्थापित है।grep -qकोई आउटपुट नहीं है, इसलिए यह एक ड्रॉप-इन प्रतिस्थापन है probeलेकिन इसके लिए नहीं poke)


0

आप बस sdf.org पर एक ssh करके परीक्षण कर सकते हैं। मैंने अभी किया, और इसने प्रमाणीकरण के लिए कहा। यदि नहीं, तो आपको अपने आईटी विभाग को पोर्ट 22 खोलने के लिए कहना होगा।


3
खाता बनाना आवश्यक नहीं है। बस sshवर्बोज़ मोड में चलाएं , और यदि यह कनेक्शन स्थापित करता है और प्रमाणीकरण के लिए पूछता है, तो फ़ायरवॉल खुला है।
ग्रेविटी

@grawity मैंने यह जांचने के लिए नहीं सोचा था कि sdf.org उनके वास्तविक सर्वर का नाम हो सकता है जिसे वे ssh करने की अनुमति देते हैं।
कोकत्रेउ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.