다음 상황을 해결하도록 도와주세요.
나는 1000개의 리눅스 서버를 가지고 있다. 내 주 서버에서 암호 없는 연결을 허용하는 서버를 찾아야 합니다. 다음은 내가 사용하는 명령입니다. 다음 명령의 문제점은 대상 서버가 비밀번호를 요청할 때 루프가 작동을 멈춘다는 것입니다.
for i in `cat srv`; do echo Server $i\n; ssh $i "uptime"; done
산출:
Server server001
04:56:01 up 62 days, 9:18, 0 users, load average: 0.09, 0.14, 0.13
서버 서버 002
Password:
어떻게 해결할 수 있나요?
답변1
옵션 -o BatchMode=yes
으로 사용해 보세요 .ssh
이렇게 하면 명령줄에서 비밀번호를 확인하고 원격 호스트 지문을 받아들이는 것이 방지됩니다.
SSH의 반환 코드를 확인하고 싶을 수도 있습니다.
for host in $(< serverlist)
do
echo testing $host
if ssh -o BatchMode=yes $host uptime
then echo host $host OK
else echo host $host KO
fi
done > result.log
답변2
GNU Parallel을 사용하면 다음과 같은 작업을 수행할 수 있습니다.
이 작업을 수행할 수 있는 서버 찾기아니요비밀번호 없는 로그인 허용:
cat srv |
parallel timeout 3 ssh {} true ' &>/dev/null ||' echo {}
비밀번호 없는 로그인을 허용하는 서버를 찾으려면:
parallel --nonall --timeout 3 --slf srv --tag echo
-j100
한 번에 100개의 서버에서 실행하려면 추가하세요 .
답변3
비밀번호 인증 대신 PubKey만 사용하도록 지정하려면 SSH 옵션을 사용하세요.
for i in `cat srv`; do echo Server $i\n; ssh -o PubKeyAuthentication=yes -o PasswordAuthentication=no $i "uptime"; done
이는 이 질문의 범위를 벗어나지만 ssh
명령의 반환 값을 확인하여 연결이 성공했는지 확인할 수 있습니다.