저는 두 개의 시스템을 가지고 있습니다: 인터넷의 Ubuntu 20.04 서버와 로컬 LAN(NAT 라우터 뒤)의 Raspberry Pi 2B(Ubuntu 18.04)입니다. 다음과 같이 Raspberry Pi에서 서버로의 역방향 터널을 엽니다.
ssh -f -N -R 13333:127.0.0.1:22 server
구성 파일은 다음과 같습니다.
Host server
Hostname <public IP>
User serveruser
IdentityFile /home/piuser/.ssh/serverkey
그런 다음 서버에서 다음 명령을 실행합니다.
ssh -p13333 -i ~/.ssh/pikey [email protected]
파이키의 경우 Raspberry에서 명령을 실행합니다(authorized_keys 파일에 설정).
어제도 이 설정을 몇 번 시도했는데, 오늘(약 24시간 후) 터널을 더 이상 사용할 수 없게 되었습니다. ss
열린 포트가 표시되고 서버에서 명령을 실행할 수 있지만 응답이 없습니다. 명령이 "중지"됩니다.
그런 다음 터널을 종료하고 문제 없이 다시 설정했습니다. 문제를 추가로 해결하기 위해 서버에서 보낸 명령에 -vvv를 추가했습니다.
ssh -vvv -p13333 -i ~/.ssh/pikey [email protected]
이는 다음 지점에서 연결이 중단되었음을 보여줍니다.
OpenSSH_8.2p1 Ubuntu-4ubuntu0.2, OpenSSL 1.1.1f 31 Mar 2020
debug1: Reading configuration data /home/serveruser/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug2: resolve_canonicalize: hostname 127.0.0.1 is address
debug2: ssh_connect_direct
debug1: Connecting to 127.0.0.1 [127.0.0.1] port 13333.
debug1: Connection established.
debug1: identity file /home/serveruser/.ssh/pikey type 0
debug1: identity file /home/serveruser/.ssh/pikey-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.2
이번에는 Raspberry Pi 웹사이트에서 다음을 보았습니다.
$ Warning: remote port forwarding failed for listen port
그래서 마지막 시도는 라즈베리를 다시 시작하는 것이었고 짜잔, 터널을 다시 설정한 후 예상대로 작동했습니다.
마지막으로 내 질문은: 무엇이 잘못되었는지 어떻게 알 수 있습니까? 저는 해외에 있을 때 이 연결에 의존하기 때문에 무엇이 잘못되었고 어떻게 고칠 수 있는지 알아내야 합니다...
그런데, Google에서 검색했지만 단 하나의 제안/해결책도 저에게 적합하지 않습니다. 처음에는 연결을 설정할 수 있었지만 몇 가지 사소한 문제로 인해 이상한 상태가 되었습니다.
더 많은 정보가 필요하시면 알려주세요 :)
답변1
Keepalive 기능을 활성화해야 할 수도 있는 것 같습니다. .ssh/config에서 다음과 같은 내용이 작동할 수 있습니다.
Host *
ServerAliveInterval 300
ServerAliveCountMax 2
답변2
Warning: remote port forwarding failed for listen port
지정된 포트에서 이미 수신 대기 중인 경우 메시지를 받게 됩니다. sudo netstat -lnp | grep 13333
이런 일이 다시 발생하면 포트가 여전히 수신 대기 중인지 확인하는 데 사용할 수 있습니다 . netstat의 p 플래그는 해당 포트에서 수신 대기 중인 모든 항목의 pid를 표시해야 합니다.
오랫동안 아무 것도 사용하지 않으면 SSH 터널이 시간 초과될 가능성이 높습니다. autossh
터널을 모니터링하고 실패할 경우 재설정하기 위해 유틸리티로 사용할 수 있습니다 .이 슈퍼유저 게시물은 이를 수행하는 방법을 보여줍니다.