SSH에 연결한 후 연결 후 명령을 실행하는 스크립트

SSH에 연결한 후 연결 후 명령을 실행하는 스크립트

원격 서버에 연결한 다음 연결되면 해당 서버에서 다른 서버에 연결하고 디렉터리를 변경하는 스크립트를 작성해야 합니다. 물론 다음은 작동하지 않습니다(첫 번째 서버에 연결한 다음 스크립트가 중지되고 연결이 끊어진 후 다시 시작됩니다).

#!/bin/bash
echo begin:
ssh  serv_1
ssh  serv_2
cd dir1

exit 0

내가 무엇을해야 하나? 내 질문과 비슷한 게시물을 읽었지만 답변을 이해할 수 없습니다.

답변1

짧은 대답은,

ssh srv_1 'ssh srv_2 "command"'

여기서 command는 실행하려는 명령입니다.

작은따옴표 없이도 작동하지만 이해를 돕기 위해 사용하는 것이 좋습니다.

ssh srv_1 ssh srv_2 "command"

따옴표를 사용하면 일부 작업 구조가 제공되지만 보시다시피 근본적으로 필요한 것은 아닙니다.

이것도 효과가 있고,

ssh srv_1 ssh srv_2 command

귀하가 제공한 정보로는 이것이 작동할지 또는 명령이 어떤 작업을 수행할지 여부를 알 수 없지만 위의 구문은 제가 취할 접근 방식입니다.

변수 또는 명령 대체를 사용해야 한다면 더 복잡해지고 빨라지며 인용 및 이스케이프에 주의해야 합니다.

다음은 이에 대한 실제 예입니다.

해왕성은 나의 호스트입니다. 트리니티는 또 다른 서버입니다. 매트릭스는 최종 서버입니다.

tony@neptune:~$ ssh trinity 'ssh matrix "hostname"'
matrix

따라서 이 명령은 서버 매트릭스에서 실행되었기 때문에 호스트 이름 매트릭스를 반환합니다.

참고: 이 방법으로 디렉토리를 변경하는 것은 전혀 효과가 없으며 디렉토리 변경은 해당 디렉토리를 실행하는 셸에만 관련됩니다.

내 말은 이것이다.

tony@Neptune:~$ ssh trinity 'ssh matrix "cd /tmp"'
tony@Neptune:~$ ssh trinity 'ssh matrix "pwd"'
/home/tony

두 번째 명령은 이전 cd명령이 지속적인 효과가 없음을 보여줍니다.

관련 정보