인터넷 어디에서나 PI에 액세스하기 위해 autossh를 사용하여 Raspberry PI에서 VPS로의 원격 포트 전달이 왜 한 번만 작동합니까?

인터넷 어디에서나 PI에 액세스하기 위해 autossh를 사용하여 Raspberry PI에서 VPS로의 원격 포트 전달이 왜 한 번만 작동합니까?

저는 인터넷 어디에서나 PI에 액세스할 수 있도록 VPS에서 Raspberry PI로의 autossh 및 원격 포트 전달을 사용하고 있지만 한 번만 작동합니다.

내 로컬 네트워크에 Raspberry PI 2가 있고(Raspbian, 문제를 재현할 수 있는지 새로 설치) 원격 포트 전달(VPS에서 PI 포트로 특정 포트 전달)을 사용하여 인터넷에서 액세스하려고 합니다. 이 방법으로 VPS에서 localhost로 SSH를 통해 PI에 액세스할 수 있습니다. 이것은 가능합니다. 그러나 저는 자리를 비울 예정이므로 몇 주 동안 PI에 대한 물리적 또는 로컬 액세스가 불가능하며 crontab을 사용하여 영구 autossh 연결을 자동화하고 싶습니다(시작 중에 autossh 원격 포트 전달 명령 실행). 전원이 꺼진 상태에서도 PI에 연결할 수 있습니다.) autossh를 사용하면 수동으로 작동하지만 crontab을 사용할 때 문제가 발생합니다. 다음은 제가 사용한 단계입니다.

crontab 전에 autossh 명령을 사용해 작동하는지 확인하십시오(명령은 PI에서 실행되며 VPS로의 원격 포트 전달이 포함되므로 VPS의 포트 7997이 PI의 포트 22로 전달됩니다).

0) /usr/bin/autossh -4 -M 0 -N -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -i path/to/private/key -R 7997:localhost:22 username@ip-address-of-vps

(지금은 VPS에서 PI로 연결하고 있습니다)

1) ssh pi@localhost -p 7997 

The authenticity of host 'x.x.x.x' can't be established.
ECDSA key fingerprint is x
Are you sure you want to continue connecting (yes/no)? yesa
Please type 'yes' or 'no': yes)

실제로 이 방법은 작동합니다. 수동으로 수행하면(0단계와 1단계에 표시된 대로) 성공적으로 연결됩니다.

그러나 재부팅 후에도 SSH 연결을 유지하려고 하면 문제가 발생합니다.

PI에서 "crontab -e"를 입력하고 다음을 삽입하세요.

2) @reboot sleep 30; /usr/bin/autossh -4 -M 0 -N -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -i path/to/private/key -R 7997:localhost:22 username@ip-address-of-vps

3) sudo reboot

1~2분 정도 기다린 후 VPS에서 들어갑니다.

4) ssh pi@localhost -p 7997

PI에 성공적으로 연결한 후 (PI에서) 입력합니다.

5) sudo reboot (again)

6) ssh pi@localhost -p 7997 (again from the VPS, after waiting 1-2 minutes)

이번에는 오류가 발생합니다.

username@vps:~$ ssh pi@localhost -p 7997
ssh_exchange_identification: read: Connection reset by peer
username@vps:~$ ssh pi@localhost -p 7997
ssh: connect to host localhost port 7997: Connection refused
username@vps:~$ ssh pi@localhost -p 7997
ssh: connect to host localhost port 7997: Connection refused

추가 관찰 사항:이 시점에서 PI에 로컬로(로컬 네트워크에서) ssh를 실행하고 수동으로 autossh를 실행한 다음(0단계 참조) VPS 내에서 PI로 ssh를 실행하면(1단계 참조) 연결됩니다. 나중에 PI를 재부팅하면 (VPS에서) 다시 연결되지만 나중에 다시 재부팅하면 "Connection Reset by Peer" 출력이 표시되고 이어서 "Connection Rejected" 출력이 표시됩니다. 이것을 무한정 반복하고, autossh를 수동으로 실행한 다음 VPS에서 연결하면 작동하고, 재부팅하면 작동하고, 다시 재부팅하면 피어에 의해 연결이 재설정됩니다.

추가 관찰 2: 내 VPS의 /var/log/auth 관련 출력은 다음과 같습니다.

Oct 30 01:27:20 vps sshd[1217]: Accepted publickey for username from x.x.x.x port 43008 ssh2: RSA SHA256:xxxxetc 
Oct 30 01:27:20 vps sshd[1217]: pam_unix(sshd:session): session opened for user username by (uid=0) 
Oct 30 01:27:20 vps sshd[1223]: error: bind: Address already in use 
Oct 30 01:27:20 vps sshd[1223]: error: channel_setup_fwd_listener_tcpip: cannot listen to port: 7997

이 문제를 해결하려면 어떻게 해야 합니까?

고쳐 쓰다:

작동하는 것은 /etc/ssh/sshd_config를 편집하는 것입니다.서버 측에서

ClientAliveInterval 60
ClientAliveCountMax 1

정확한 값은 원하는 동작 방식에 따라 다릅니다. 서버와 클라이언트를 다시 시작하십시오. 또한 이 전에 (설치되어 있는 경우) failure2ban을 제거하고 클라이언트 컴퓨터를 다시 시작할 수 있는지 확인한 후 다시 설치하는 것을 고려할 수도 있으며 여러 번 다시 시작한 후에도 계속 작동할 수 있습니다. 클라이언트 컴퓨터의 IP가 금지되었을 수 있기 때문입니다. 시도하다.

답변1

고쳐 쓰다:

작동하는 것은 /etc/ssh/sshd_config를 편집하는 것입니다.서버 측에서

ClientAliveInterval 60
ClientAliveCountMax 1

정확한 값은 원하는 동작 방식에 따라 다릅니다. 서버와 클라이언트를 다시 시작하십시오. 또한 이 전에 (설치되어 있는 경우) failure2ban을 제거하고 클라이언트 컴퓨터를 다시 시작할 수 있는지 확인한 후 다시 설치하는 것을 고려할 수도 있으며 여러 번 다시 시작한 후에도 계속 작동할 수 있습니다. 클라이언트 컴퓨터의 IP가 금지되었을 수 있기 때문입니다. 시도하다.

관련 정보