나는 이 주제에 관해 여기에서 여러 게시물을 읽었지만 내가 찾은 모든 솔루션은 하나의 명령을 실행하는 하나의 라이너인 것 같습니다.
한 번에 하나씩 여러 다른 호스트에 ssh하는 스크립트를 만들고 있습니다. 목표는 SSH로 머신에 접속하고, 일부 로컬 명령을 수행하고, aa 스크립트를 실행하고, 완료될 때까지 기다린 후 SSH 세션을 종료하고 다음으로 이동하는 것입니다.
그러나 "exit" 명령을 사용하면 작동하지 않고 스크립트가 완전히 종료됩니다.
답변1
답변2
명령을 파일에 넣고 cat이나 EOF를 사용해 보셨나요?
ssh -t [email protected] << EOF
command1
command2
exit
EOF
답변3
나는 pssh
당신이 달성하려는 것이 무엇인지 살펴보는 것이 좋습니다. 이를 통해 컴퓨터 간 연결 열기/닫기의 미묘한 차이를 쉽게 처리할 수 있으며 병렬로 실행하여 실행 시간을 줄일 수도 있습니다.
여전히 전송 프로토콜로 사용되므로 ssh
루프 연결만큼 안전합니다 ssh
.
답변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에 복잡한 내용을 추가하는 것은 일반적으로 수행할 가치가 있는 것보다 더 어렵습니다.
나는 이 작업을 수백 번 수행했으며 한 번에 하나의 서버에서 작업을 실행하려는 경우에는 잘 작동합니다. 작업을 병렬로 실행하려면 다른 옵션이 있지만 다음을 살펴보겠습니다.앤서블첫 번째.