서버 목록에서 ping 명령을 실행하고 파일로 출력

서버 목록에서 ping 명령을 실행하고 파일로 출력

servers.txt서버 목록이 포함된 파일이 다른 서버에 있습니다.

server1.mydomain.com
server2.mydomain.com
server3.mydomain.com

먼저 이 txt 파일을 다운로드하고 해당 서버에 ping을 수행한 후 ping 결과를 파일로 출력하고 싶습니다. x초마다 무한 루프로 이 작업을 수행하고 싶습니다.

나는 VPS 로그인을 가지고 있으며 지금까지 VPS에 연결하기 위해 호출되는 프로그램을 사용하여 알아냈습니다 putty.exe.

이 문제를 어떻게 처리해야 합니까? 스크립트를 작성하고 서버가 x초마다 실행되도록 설정하거나 while 루프를 사용해야 한다고 생각합니다.

답변1

좋아요, 이제 귀하의 질문을 이해했다고 믿습니다.

호스트 1에서

host1설치할 호스트를 통해 이미 연결되어 있거나 (패키지 관리자에서 해당 호스트가 있어야 함) 가정해 보겠습니다 . 초보자에게는 조금 더 쉽기 때문에 추천합니다.sshputtyscreentmuxscreen

또한 로그인이 가능해야 하므로 host2비밀번호 없이 로그인할 수 있는 계정을 host1설정해야 합니다 . ssh key이렇게 하려면 다음을 실행해야 합니다.

ssh-keygen -f ~/.ssh/host1tohost2

비밀번호를 묻는 메시지가 표시됩니다. 스크립트 실행을 자동화하려면(비밀번호를 수동으로 입력할 필요 없이) 빈 비밀번호로 설정해야 합니다. Host1이 안전한지 확인하세요! 이 키 덕분에 제어권을 가진 사람은 누구나 host1제어권을 얻을 수 있습니다 host2(사용자 권한이 허용하는 한도 내에서).

이 명령은 다음 파일을 생성합니다.

~/.ssh/host1tohost2
~/.ssh/host1tohost2.pub

~/.ssh/host1tohost2.pub다음 위치에 복사해야 합니다 host2.

scp ~/.ssh/host1tohost2.pub me@host2:~

호스트2에서

Host2에서 생성 ~/.ssh하고 그곳으로 이동한 후 해당 디렉터리에 다음과 같은 파일을 생성합니다 host1tohost2.pub.authorized_keys

mkdir -f ~/.ssh
mv ~/host1tohost2.pub ~/.ssh
cd ~/.ssh
cat host1tohost2.pub >> authorized_keys

이를 통해 대화형 비밀번호 프롬프트 없이 host1로그인 할 수 있습니다 .host2

다음,

파일이 servers.txt에 있다고 가정해 보겠습니다. 이 가정은 스크립트에서 사용할 것이기 때문에 필요합니다./home/me/myservers/servers.txthost2pathhost1

호스트 1로 돌아가기

필요한 무한 루프 스크립트는 다음과 같습니다.

#!/bin/sh

X_SECONDS=6
LOGFILE=~/mypings.log

while ((1)); do
    # >$LOGFILE  # clear log file (see comments)
    ssh -i ~/.ssh/host1tohost2 me@host2 'cat /home/me/myservers/servers.txt' |
    while read x; do
        echo "ping to $x"
        ping -c1 $x >> $LOGFILE
    done
    sleep $X_SECONDS
done

스크립트가 이라는 파일에 저장되어 있다고 가정합니다 pingservers.sh. 그러나 일단 닫으면 중지되므로 아직 실행하지 마십시오 putty. 이제 screen현장으로 가보겠습니다(설치하셨죠?). 달리기:

screen

분명히 아무것도 변하지 않았습니다. 이제 in을 통해 접근한 환경에 있는데 shell, 그 후 그 쉘에서 닫으면 쉘은 한 번도 닫히지 않습니다. (실제로 OS만 종료하면 문제가 해결되고 어차피 쉘도 닫히지 않게 되지만, 교육적인 이유로 적절하게 수행하십시오). 분리하기 전에 다음을 실행해야 합니다.socket/var/rundetachputtyputtydetach

./pingservers.sh

영원히 실행되며 echo로그 파일에 쓰는 동안 여러 메시지를 유지합니다.

분리하려면 screen키를 입력해야 합니다 Ctrl+A D( 를 Ctrl누르고 있다 A가 떼고 Ctrl를 누릅니다 D). 다시 shell로그인 되었으므로 이제 닫고 커피 한 잔을 마실 putty수 있습니다 .putty

다시 로그인하면 host1파일이 ~/mypings.log점점 더 많은 핑으로 업데이트됩니다( screen다시 실행할 필요 없음). 실시간 업데이트된 파일을 확인하려면 다음을 사용할 수 있습니다.

tail -f ~/mypings.log

이것아치 리눅스 위키에는 ssh-keygen 및 SSH 키에 대한 더 유용한 정보가 있습니다., 마찬가지다GNU 화면. 두 기사 모두 두 프로그램에 대한 훌륭한 정보 소스입니다.

답변2

for i in `cat servers.txt` ; do ping -c1 $i 2>&1 | tee >> ping-output.txt; done

이는 파일의 모든 행을 ping하고(i를 변수로 사용하여 값을 저장하고 $i를 사용하여 변수를 참조) 모든 출력을 [output] 파일로 리디렉션합니다. 파트 2>&1은 tee 명령을 사용하여 stdout(ping 결과) 및 stderr(호스트 오류가 없었기 때문에 ping이 없음)을 파일에 캡처합니다.

관련 정보