Bash 스크립트에서 SSH 연결을 종료하는 방법

Bash 스크립트에서 SSH 연결을 종료하는 방법

나는 이 주제에 관해 여기에서 여러 게시물을 읽었지만 내가 찾은 모든 솔루션은 하나의 명령을 실행하는 하나의 라이너인 것 같습니다.

한 번에 하나씩 여러 다른 호스트에 ssh하는 스크립트를 만들고 있습니다. 목표는 SSH로 머신에 접속하고, 일부 로컬 명령을 수행하고, aa 스크립트를 실행하고, 완료될 때까지 기다린 후 SSH 세션을 종료하고 다음으로 이동하는 것입니다.

그러나 "exit" 명령을 사용하면 작동하지 않고 스크립트가 완전히 종료됩니다.

답변1

으로 직접 호출하기 때문에 스크립트가 쉘 세션을 종료하지 않는 것 같습니다 ./exit.sh. 대신 그렇게 해야 합니다 source.

exit그러면 스크립트의 명령문이 셸 세션을 닫습니다 .

$ source exit.sh
# or
$ . exit.sh

내장 source기능은 다음에서 스크립트를 실행합니다.현재 쉘 컨텍스트./exit.sh을 실행하는 동안새로운 껍질그것을 실행합니다.

답변2

명령을 파일에 넣고 cat이나 EOF를 사용해 보셨나요?

ssh -t [email protected] << EOF
 command1
 command2
 exit
EOF

답변3

나는 pssh당신이 달성하려는 것이 무엇인지 살펴보는 것이 좋습니다. 이를 통해 컴퓨터 간 연결 열기/닫기의 미묘한 차이를 쉽게 처리할 수 있으며 병렬로 실행하여 실행 시간을 줄일 수도 있습니다.

여전히 전송 프로토콜로 사용되므로 ssh루프 연결만큼 안전합니다 ssh.

https://linux.die.net/man/1/pssh

답변4

for일반적으로 문제 없이 루프를 수행할 수 있습니다 ssh.

$ for srv in 192.168.88.138; do echo $srv:; ssh $srv uptime; done
192.168.88.138:
 13:27:25 up 30 days,  8:42,  1 user,  load average: 4.15, 4.06, 4.06

uptime그래서 이번 경우에는 반대편으로 달려갔습니다 . uptime실행하려는 항목으로 바꿀 수 있습니다 . 거기에 무엇을 놓아도 출구가 있어야 하는 곳에 있습니다. 출력이 인쇄되면 종료되지만 스크립트를 작성하는 경우 루프가 계속될 수 uptime있도록 결국 종료되는지 확인해야 할 수도 있습니다 .for

복잡한 작업을 수행하는 경우 별도의 파일에 스크립트를 만든 다음 scp실행하려는 서버에 보낸 다음 SSH를 통해 실행하는 것이 좋습니다. 인용 및 이스케이프를 통해 ssh에 복잡한 내용을 추가하는 것은 일반적으로 수행할 가치가 있는 것보다 더 어렵습니다.

나는 이 작업을 수백 번 수행했으며 한 번에 하나의 서버에서 작업을 실행하려는 경우에는 잘 작동합니다. 작업을 병렬로 실행하려면 다른 옵션이 있지만 다음을 살펴보겠습니다.첫 번째.

관련 정보