서버와 Raspberry Pi 간의 SSH 역방향 터널 문제 해결

서버와 Raspberry Pi 간의 SSH 역방향 터널 문제 해결

저는 두 개의 시스템을 가지고 있습니다: 인터넷의 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터널을 모니터링하고 실패할 경우 재설정하기 위해 유틸리티로 사용할 수 있습니다 .이 슈퍼유저 게시물은 이를 수행하는 방법을 보여줍니다.

관련 정보