역방향 터널을 만들기위한 영구 백그라운드 ssh 연결 : 올바른 방법은 무엇입니까? echo “restarting in 5 seconds..”

관련 질문 : 서버에서 클라이언트로 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“예를 들어”neverending “명령을 호출하면 작동한다는 것을 알았 으므로 빈 파일을 만들었으므로 /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 연결을 만드는 올바른 방법은 무엇입니까?



답변

-Nssh 옵션을 원하는 것처럼 들립니다 .

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


답변

나는 당신이 고려하는 것이 좋습니다 autossh. 연결 유실이 근본적인 이유인지 판별하고 재 연결 시도 빈도를 낮추는 특정 휴리스틱이 있습니다. 또한 추가 터널을 사용하여 연결을 모니터링하므로 요청한 것과 같은 시나리오에 매우 유용합니다.

예를 들어 autossh upstartUbuntu를 사용하는 경우 터널을 지속적으로 유지하도록 Ubuntu를 구성하는 방법에 대한 유용한 예를 찾기 위해 웹 검색을 수행 할 수 있습니다 .

특정 서비스에 대해 항상 터널 연결을 내 서버에 열어두기 위해 이것을 사용하고 있습니다.


답변

@ 0xC0000022L의 제안 과 두 번째를 사용하겠습니다 autossh. 나는 그것을 어디에서 가져 가도 랩톱에서 SSH 연결을 유지하기 위해 사용합니다. 이 연결을 사용하여 개인 SMTP 및 IMAP 서버에 액세스하기 위해 포트 25 및 2143을 터널 백합니다.

내가 사용하는 스크립트는 다음과 같습니다.

$ 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 파일에 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 sam@mygw.mydom.com nc `echo %h|sed 's/-o//'` %p

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

       ss # 1

                                          ss # 2


답변