ฉันจะตรวจสอบว่าฉันสามารถเข้าสู่เซิร์ฟเวอร์ผ่านทาง ssh ได้อย่างไร?


13

ฉันมีรายชื่อเซิร์ฟเวอร์:

cat list.txt
10.10.10.10 servera
10.11.10.10 serverb

ฉันจะตรวจสอบว่าฉันสามารถเข้าสู่ระบบผ่านทาง ssh ได้อย่างไร? ฉันหมายถึงโดยค่าเริ่มต้นฉันควรจะสามารถเข้าสู่ระบบผ่านทางคีย์ ssh auth .. ดังนั้นในระยะสั้นฉันต้องการวิธีแก้ปัญหาที่เรียงลำดับบรรทัด (เซิร์ฟเวอร์) ใน list.txt ดังนี้:

  • เซิร์ฟเวอร์ที่ฉันสามารถเข้าสู่ระบบผ่านทางคีย์ ssh
  • เซิร์ฟเวอร์ที่ถามรหัสผ่าน (ไม่ทราบรหัสผ่านแน่นอน .. )
  • เซิร์ฟเวอร์ที่ไม่สามารถเข้าถึงได้

ด้วยความช่วยเหลือของ SSH และ ping คำสั่งยูอาจบรรลุมัน
Balaswamy vaddeman

pingไม่ใช่ตัวบ่งชี้ที่ดีจริงๆ มีการตั้งค่าจำนวนมากที่อนุญาตsshการเชื่อมต่อ แต่ไม่ตอบกลับการปิง
จ้า

คำตอบ:


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 :

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

นวดผลลัพธ์ตามต้องการ

บันทึก Side: ทำไมคุณถึงการจัดเก็บที่อยู่ IP ใน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..)

คาดหวังจะให้ข้อมูลกับคำสั่งแบบโต้ตอบของคุณ ไคลเอ็นต์ ssh พร้อมกับแฟล็ก -v จะบอกให้คุณทราบว่าเซิร์ฟเวอร์ยอมรับวิธีใด หากคุณได้รับพรอมต์อินเทอร์แอคทีฟ ทำในสิ่งที่คุณต้องการคุณมีทุกอย่างที่คุณต้องการ

servers that are unreachable

คำสั่งเดียวที่จะปกครองพวกมันทั้งหมดและในความมืดมัดพวกเขาไว้ ... ฮัม


0

คำสั่ง mussh จะส่งออกข้อผิดพลาดเท่านั้นดังนั้นคุณสามารถให้รันโดยไม่มีการดีบัก

$ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.