서버 목록이 있습니다.
cat list.txt
10.10.10.10 servera
10.11.10.10 serverb
SSH를 통해 로그인할 수 있는지 어떻게 확인할 수 있나요? 기본적으로 SSH 키 인증을 통해 로그인할 수 있어야 한다는 뜻입니다. 간단히 말해서 list.txt의 행(서버)을 다음과 같이 정렬하는 솔루션이 필요합니다.
- SSH 키를 통해 로그인할 수 있는 서버
- 서버에서 비밀번호를 묻는 메시지(물론 비밀번호는 알 수 없습니다..)
- 연결할 수 없는 서버
답변1
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
다양한 출력 파일을 함께 보관하면 됩니다.
답변2
여러 호스트에서 SSH를 통해 명령 실행을 자동화하는 다양한 도구를 찾아보세요. 예를 들어,걸쭉한 죽:
mussh -H hosts.txt -o ConnectTimeout=5 -P -d -c 'echo `hostname` is alive'
필요에 따라 출력을 마사지합니다.
참고 사항: IP 주소가 에 저장되는 이유는 무엇입니까 list.txt
? 서버 이름이면 충분합니다. 사용하려는 이름이 DNS 이름이 아닌 경우 Host
의 지시어를 사용하세요 ~/.ssh/config
.
답변3
servers that I can log in via ssh key
servers that prompts for password (of course password is unknown..)
Expect는 대화형 명령에 대한 입력을 제공합니다. -v 플래그가 있는 SSH 클라이언트는 서버가 허용하는 인증 방법을 알려줍니다. 대화형 프롬프트가 나타나면 종료합니다. 원하는 것을 하세요. 필요한 모든 것을 갖추고 있습니다.
servers that are unreachable
마찬가지로, 그들 모두를 지배하고, 어둠 속에서 그들을 묶으라는 명령은... 흠.
답변4
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