1000개의 Linux 서버에 대한 명령 SSH 연결

1000개의 Linux 서버에 대한 명령 SSH 연결

다음 상황을 해결하도록 도와주세요.

나는 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명령의 반환 값을 확인하여 연결이 성공했는지 확인할 수 있습니다.

관련 정보