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로 파이프하면 됩니다.