관련 질문 : 서버에서 클라이언트로 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 연결을 만드는 올바른 방법은 무엇입니까?
while
루프가 반복해서 실행되어 ssh
5 초마다 새로운 백그라운드 연결이 시작 됩니다. 이것은 내가 필요한 것이 아닙니다.
&
ssh 명령 끝에서 사용하는 것은 어떻ssh -o ServerAliveInterval=240 -R 2225:localhost:22 user@host &