관련 질문:서버-클라이언트 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
-N
ssh 옵션을 원하는 것 같습니다 .
-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
.