관련 질문 : 서버에서 클라이언트로 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 연결을 만드는 올바른 방법은 무엇입니까?
답변
-N
ssh 옵션을 원하는 것처럼 들립니다 .
-N Do not execute a remote command. This is useful for just forwarding ports
(protocol version 2 only).
답변
나는 당신이 고려하는 것이 좋습니다 autossh
. 연결 유실이 근본적인 이유인지 판별하고 재 연결 시도 빈도를 낮추는 특정 휴리스틱이 있습니다. 또한 추가 터널을 사용하여 연결을 모니터링하므로 요청한 것과 같은 시나리오에 매우 유용합니다.
예를 들어 autossh upstart
Ubuntu를 사용하는 경우 터널을 지속적으로 유지하도록 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
.