web-dev-qa-db-ja.com

インターネット上のどこからでもPIにアクセスするためのRaspberryPiからVPSへのautosshを使用したリモートポートフォワーディング、なぜ一度だけ機能するのですか?

インターネット上のどこからでもPIにアクセスできるようにするために、VPSからRaspberry Piへのリモートポート転送でautosshを使用していますが、機能するのは1回だけです。

ローカルネットワークにRaspberryPi 2(Raspbian、フレッシュインストール、問題を再現できることを確認するため)があり、リモートポートフォワーディング(VPSの一部のポートをPIポートに転送)を使用してインターネットからアクセスしたい22、VPSからローカルホストにsshしてPIにアクセスできるようにします)。これは機能しますが、私は不在になるため、PIへの物理的またはローカルアクセスが数週間ありません。crontabを使用して永続的なautossh接続を自動化したいと思います(autosshremote-port-forwardingコマンドは起動して、停電が発生した場合でも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から)再度接続しますが、その後再起動すると、「ピアによる接続リセット」出力が表示され、その後に「接続が拒否されました」と表示されます。出力。これを無期限に繰り返し、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

具体的な値は、どのように動作させるかによって異なります。そして、サーバーとクライアントの両方を再起動します。また、この前にfail2banをアンインストールし(インストールしている場合)、クライアントマシンを再起動できることを確認してから再インストールすることを検討してください。これは、fail2banが以前のクライアントマシンのIPを禁止している可能性があるためです。試み。

1
Jeff.D

更新:

うまくいったのは/ etc/ssh/sshd_configの編集でしたサーバー側で

ClientAliveInterval 60
ClientAliveCountMax 1

具体的な値は、どのように動作させるかによって異なります。そして、サーバーとクライアントの両方を再起動します。また、この前にfail2banをアンインストールして(インストールしている場合)、クライアントマシンを再起動できることを確認してから再インストールすることを検討してください。これは、fail2banが以前のクライアントマシンのIPを禁止している可能性があるためです。試み。

1
Jeff.D