Làm cách nào để kiểm tra xem tôi có thể đăng nhập vào máy chủ qua ssh không?


13

Tôi có một danh sách các máy chủ:

cat list.txt
10.10.10.10 servera
10.11.10.10 serverb

Làm cách nào tôi có thể kiểm tra xem tôi có thể đăng nhập qua ssh cho họ hay không? Ý tôi là mặc định tôi có thể đăng nhập thông qua khóa ssh auth .., vì vậy, trong ngắn hạn, tôi cần một giải pháp sắp xếp các dòng (máy chủ) trong list.txt như thế này:

  • máy chủ mà tôi có thể đăng nhập thông qua khóa ssh
  • máy chủ nhắc mật khẩu (tất nhiên mật khẩu không xác định ..)
  • máy chủ không thể truy cập được

với sự trợ giúp của các lệnh ssh và ping, bạn có thể đạt được nó
Balaswamy vaddeman

pingkhông thực sự là một chỉ số tốt. Có rất nhiều thiết lập cho phép sshkết nối nhưng không trả lời ping.
Mat

Câu trả lời:


25

Bạn có thể làm điều đó với sự kết hợp của BatchModetùy chọn và "phân tích" đầu ra. ( sshluôn trả về 255 nếu không kết nối được vì bất kỳ lý do gì, vì vậy bạn không thể sử dụng mã trả về để phân biệt giữa các loại lỗi.)

Với BatchModebật, không có lời nhắc mật khẩu hoặc tương tác nào khác được thử, do đó, một kết nối yêu cầu mật khẩu sẽ không thành công. (Tôi cũng đặt một ConnectTimeouttrong đó cần được điều chỉnh để phù hợp với nhu cầu của bạn. Và chọn tên tập tin thực sự xấu.)

#! /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

Bạn có thể phát hiện các loại lỗi khác (như thiếu khóa công khai của máy chủ) nếu bạn cần phân loại chi tiết hơn. Nếu bạn cần các kết quả trong một tệp được sắp xếp, chỉ catcác tệp đầu ra khác nhau khi bạn thấy phù hợp.


1

Tra cứu các công cụ khác nhau tự động hóa các lệnh đang chạy trên nhiều máy chủ thông qua ssh. Ví dụ: với Mussh :

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

Massage đầu ra khi cần thiết.

Lưu ý bên lề: tại sao bạn lưu trữ địa chỉ IP list.txt? Tên máy chủ là đủ. Nếu tên bạn muốn sử dụng không phải là tên DNS, hãy sử dụng Hostcác lệnh trong ~/.ssh/config.


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

mong đợi sẽ cung cấp đầu vào cho các lệnh tương tác của bạn. Máy khách ssh với cờ -v sẽ cho bạn biết phương thức xác thực mà máy chủ chấp nhận. Nếu bạn nhận được lời nhắc tương tác, hãy làm cho nó thoát. Làm những gì bạn muốn, bạn có tất cả những gì bạn cần.

servers that are unreachable

Tương tự, một lệnh để cai trị tất cả, và trong bóng tối, trói buộc họ ... Hum.


0

Lệnh mussh sẽ chỉ xuất ra các lỗi để bạn có thể chạy nó mà không cần gỡ lỗi.

$ 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.