일정 기간 동안 명령을 "스트리밍"하기 위해 지속적인 SSH 연결을 생성하려면 어떻게 해야 합니까?

일정 기간 동안 명령을 "스트리밍"하기 위해 지속적인 SSH 연결을 생성하려면 어떻게 해야 합니까?

SSH를 통해 네트워크의 다른 PC(두 시스템 모두 Linux를 실행함)에 명령을 보내는 한 PC에서 실행되는 애플리케이션이 있다고 가정해 보겠습니다.

예를 들어 #1에서 무슨 일이 발생할 때마다 #2에서 작업을 실행하고 싶습니다. 이 설정에서는 모든 단일 명령에 대해 SSH 연결을 생성해야 합니다.

사용자 정의 클라이언트/서버 응용 프로그램을 프로그래밍하지 않고 기본 Unix 도구를 사용하여 이를 수행할 수 있는 간단한 방법이 있습니까? 기본적으로 내가 원하는 것은 SSH를 통해 연결을 설정한 다음 명령을 하나씩 보내는 것입니다.

답변1

프로덕션 환경에서 사용할 수 있는지 확실하지 않지만 다음과 같이 할 수 있습니다.

#1에 파일 생성

1>touch /tmp/commands

그런 다음 명령을 실행하십시오.

1>tail -f /tmp/commands | ssh [email protected]

그러면 /tmp/commands 파일이 열리고 해당 콘텐츠가 서버 xxxx(#2)로 전송되기 시작하고 거기서 한 줄씩 실행됩니다.

이제 #1에서 무슨 일이 일어날 때마다 다음을 수행하세요.

1>echo "ls -l" >> /tmp/commands

또는

1>echo "reboot" >> /tmp/commands

/tmp/commands 파일에 추가한 모든 내용은 #2로 전송되어 실행됩니다. 대화형으로 실행하지 않거나 어떻게든 처리하지 않도록 하세요.

답변2

OpenSSH를 사용한 자동 지속성

ControlMaster첫 번째 연결에 대해 Unix 도메인 소켓을 열고 모든 후속 호출에서 이 연결을 재사용하는 OpenSSH 기능을 사용할 수도 있습니다 .

-M이 기능을 활성화하려면 명령줄 스위치로 사용하거나 ControlMaster에서 옵션을 활성화하면 됩니다 ~/.ssh/ssh_config. 예:

ControlMaster auto

ControlPath또한 다음 줄을 사용하여 설정해야 합니다 ~/.ssh/ssh_config.

Host *
   ControlPath ~/.ssh/master-%r@%h:%p

호스트에 대한 지속적인 연결을 유지하려면, 예를 들어 호스트에 많은 SSH 연결을 설정해야 하는 스크립트를 실행하려는 경우(스크립트의 전체 수명 동안 지속되지는 않음) 다음을 사용하여 미리 자동 연결을 시작할 수 있습니다.

ssh -MNf remotehost

Cheerio, 네소노

답변3

/etc/ssh/ssh_config추가 로

# Send keep alive signal to remote sshd
ServerAliveInterval 60

답변4

예, 파이프를 사용하면 가능합니다.

echo 'echo "hi"' | ssh -i my_private_key tester@host2

그러면 호스트2에서 echo "hi" 명령이 실행됩니다.

명령을 제공하는 프로그램을 작성하고(;를 잊지 마세요) 해당 출력을 ssh로 파이프하면 됩니다.

관련 정보