अगर मैं ssh के माध्यम से सर्वर में लॉग इन कर सकता हूं तो कैसे जांच करें?


13

मेरे पास सर्वरों की सूची है:

cat list.txt
10.10.10.10 servera
10.11.10.10 serverb

मैं कैसे जांच सकता हूं कि मैं उन्हें ssh के माध्यम से लॉग इन कर सकता हूं या नहीं? मेरा मतलब है कि डिफ़ॉल्ट रूप से मुझे ssh कुंजी के माध्यम से लॉग इन करने में सक्षम होना चाहिए .. इसलिए, संक्षेप में, मुझे इस तरह की सूची में लाइनों (सर्वर) को हल करने के लिए एक समाधान की आवश्यकता है।

  • सर्वर है कि मैं ssh कुंजी के माध्यम से लॉग इन कर सकते हैं
  • सर्वर जो पासवर्ड के लिए संकेत देता है (बेशक पासवर्ड अज्ञात है ..)
  • सर्वर जो पहुंच से बाहर हैं

ssh और पिंग कमांड्स की मदद से आप इसे प्राप्त कर सकते हैं
बालास्वामी वड्डमन

pingवास्तव में एक अच्छा संकेतक नहीं है। बहुत सारे सेटअप हैं जो sshकनेक्शन की अनुमति देते हैं लेकिन पिंग्स का जवाब नहीं देते हैं ।
Mat

जवाबों:


25

आप BatchModeविकल्प के संयोजन और आउटपुट को "पार्स" कर सकते हैं। ( sshहमेशा 255 रिटर्न अगर यह किसी भी कारण से कनेक्ट करने में विफल रहता है, तो आप असफलताओं के प्रकारों के बीच अंतर करने के लिए रिटर्न कोड का उपयोग नहीं कर सकते।)

इसके साथ BatchMode, कोई पासवर्ड प्रॉम्प्ट या अन्य इंटरैक्शन का प्रयास नहीं किया जाता है, इसलिए एक पासवर्ड की आवश्यकता वाले कनेक्ट विफल हो जाएंगे। (मैं भी ConnectTimeoutवहाँ एक डाल दिया है , जो अपनी आवश्यकताओं को फिट करने के लिए समायोजित किया जाना चाहिए। और वास्तव में खराब फ़ाइलनाम उठाया।)

#! /bin/bash

rm good no_auth other
while read ip host ; do
    status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 $ip echo ok 2>&1)
    case $status in
        ok) echo $ip $host >> good ;;
        *"Permission denied"*) echo $ip $host $status >> no_auth ;;
        *) echo $ip $host $status >> other ;;
    esac
done < list.txt

यदि आपको अधिक विस्तृत वर्गीकरण की आवश्यकता है, तो आप अन्य प्रकार की त्रुटियों (जैसे लापता सर्वर सार्वजनिक कुंजी) का पता लगा सकते हैं। यदि आपको एकल, सॉर्ट की गई फ़ाइल में परिणामों की आवश्यकता है, catतो जैसा कि आप फिट देखते हैं , बस विभिन्न आउटपुट फाइलें एक साथ।


1

विभिन्न उपकरणों को देखें जो ssh के माध्यम से कई मेजबानों पर चल रहे कमांड को स्वचालित करते हैं। उदाहरण के लिए, मुश के साथ :

mussh -H hosts.txt -o ConnectTimeout=5 -P -d -c 'echo `hostname` is alive'

आवश्यकतानुसार आउटपुट की मालिश करें।

साइड नोट: आप आईपी एड्रेस को क्यों स्टोर कर रहे हैं list.txt? सर्वर नाम पर्याप्त हैं। यदि आप जिन नामों का उपयोग करना चाहते हैं, वे DNS नाम नहीं हैं, तो Hostनिर्देशों का उपयोग करें ~/.ssh/config


0
servers that I can log in via ssh key
servers that prompts for password (of course password is unknown..)

उम्मीद है कि आपके इंटरैक्टिव कमांड्स को इनपुट प्रदान करेगा। -V ध्वज के साथ ssh क्लाइंट आपको बताएगा कि सर्वर कौन से तरीकों को स्वीकार करता है। यदि आप इंटरेक्टिव प्रॉम्प्ट में आते हैं, तो इसे छोड़ दें। तुम जो चाहते हो, करो, तुम्हारे पास वह सब है जो तुम्हें चाहिए।

servers that are unreachable

वही, एक आदेश उन सभी पर शासन करने के लिए, और अंधेरे में, उन्हें बांधें ... हम।


0

मुश कमांड केवल त्रुटियों को आउटपुट करेगा ताकि आप इसे बिना डिबग के चला सकें।

$ cat list.txt
10.1.2.93       trustme
10.1.2.92       wobudong
10.41.41.41     failhost

$ awk '{print $2}' list.txt | mussh -H - -t 10 -m -c hostname
trustme: trustme
failhost: ssh: Could not resolve hostname failhost: Name or service not known
wobudong: ssh: connect to host wobudong port 22: Connection timed out
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.