영구 백그라운드 SSH 연결을 사용하여 역방향 터널 만들기: 올바른 방법은 무엇입니까?

영구 백그라운드 SSH 연결을 사용하여 역방향 터널 만들기: 올바른 방법은 무엇입니까?

관련 질문:서버-클라이언트 SSH 연결 시작

거기에 있는 답변은 나에게 많은 도움이 되었으며 이 명령은 내 요구 사항을 충족합니다.

ssh -R 2225:localhost:22 loginOfServerWithPublicIP@publicIP

그래서 항상 다시 연결하는 스크립트를 작성했습니다.

 #!/bin/bash

 while true; do
    echo "try to connect..."
    ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host
    echo "restarting in 5 seconds.."
    sleep 5
 done

에 추가했지만 /etc/crontab셸에서 "수동으로" 실행하면 작동하지만 cron에서 호출하면 ssh가 연결되어 즉시 완료된다는 것을 알았습니다. (그래서 위의 스크립트는 항상 다시 연결됩니다)

에서 man ssh백그라운드 연결을 위해 키를 사용하여 호출해야 한다는 것을 알았지 -n만 이는 도움이 되지 않았습니다. 그런 다음 유사한 스크립트를 둘러본 결과 tail -f something"끝나지 않는" 명령을 호출하면 작동한다는 것을 알았습니다. 그래서 방금 빈 파일을 만들었고 /tmp/dummy_file이제 ssh 명령은 다음과 같습니다.

ssh -o ServerAliveInterval=240 -R 2225:localhost:22 -n user@host tail -f /tmp/dummy_file

이제 괜찮아! 그러나 이 솔루션은 약간 보기 흉해 보이며 이 동작의 실제 이유를 실제로 이해하지 못합니다. 우연히 bash대신 호출을 시도했지만 tail -f( bash제 생각에는 "끝이 없는" 명령이기도 함) 작동하지 않았습니다.

그렇다면 누구나 이 동작을 설명할 수 있으며 역방향 SSH 터널을 계속 실행하기 위해 백그라운드 SSH 연결을 만드는 올바른 방법은 무엇입니까?

답변1

-Nssh 옵션을 원하는 것 같습니다 .

 -N      Do not execute a remote command.  This is useful for just forwarding ports
         (protocol version 2 only).

답변2

꼭 고려해보시길 권해드립니다autossh. 연결 손실이 근본 원인인지 확인하고 재연결 시도 빈도를 줄이는 특정 경험적 ​​방법이 있습니다. 또한 추가 터널을 사용하여 연결을 모니터링하므로 요청한 시나리오에 유용합니다.

예를 들어 Ubuntu를 사용하는 경우 웹 검색을 통해 autossh upstart터널을 지속적으로 유지 관리하도록 Ubuntu를 구성하는 방법에 대한 몇 가지 유용한 예를 찾을 수 있습니다.

나는 이것을 사용하여 특정 서비스에 대해 항상 내 서버에 대한 개방형 터널 연결을 유지합니다.

답변3

나는 두 번째가 될 것이다@0xC0000022L의 제안을 사용하고 autossh. 나는 이것을 한 장소에서 다른 장소로 가져갈 때 내 노트북에 대한 SSH 연결을 유지하는 데 사용하며 정상적으로 작동합니다. 저는 이 연결을 사용하여 백 포트 25와 2143을 터널링하여 개인 SMTP 및 IMAP 서버에 액세스합니다.

이것은 내가 사용하는 스크립트입니다.

$ more /home/saml/bin/autossh_mail.sh
#!/bin/bash

autossh -M 0 -f -N -L 2025:localhost:25 -L 2143:localhost:143 sam@imap-o

그런 다음 Host파일 $HOME/.ssh/config에 호스트 항목을 유지합니다 imap-o.

$ more $HOME/.ssh/config
ServerAliveInterval 15
ForwardX11 yes
ForwardAgent yes
ForwardX11Trusted yes

GatewayPorts yes

Host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
IdentityFile ~/.ssh/id_dsa

Host imap-o
    User sam
    ProxyCommand ssh [email protected] nc `echo %h|sed 's/-o//'` %p

autossh_mail.sh로그인하면 스크립트가 데스크탑의 일부로 실행됩니다. 를 통해 액세스할 수 있습니다 gnome-session-properties.

       SS #1

                                          SS #2

관련 정보