Autossh経由でトンネルを設定しました。
これは機能します:
autossh -M 33201 -N -i myIdFile -R 33101:localhost:22 [email protected]
Autosshをバックグラウンドで実行したいと思います。 -f
オプションを使用すると簡単に思えます。
ただし、これは機能しません。
autossh -f -M 33201 -N -i myIdFile -R 33101:localhost:22 [email protected]
Autosshはバックグラウンドで正常に実行されますが、ssh接続は毎回失敗するようです。/var/syslogに、次のような複数の発生が見られます。
autossh[3420]: ssh exited with error status 255; restarting ssh
何が悪いのですか?野生の推測は、それがキーファイルを介した認証に関係していることです。これをどのようにデバッグできますか(sshオプションに-vを追加してもどこにもログが記録されないようです)。
編集: -yオプションを使用してsshログを取得しました
/usr/bin/ssh[3484]: debug1: Next authentication method: publickey
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_rsa
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_dsa
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_ecdsa
/usr/bin/ssh[3484]: debug1: No more authentication methods to try.
/usr/bin/ssh[3484]: fatal: Permission denied (publickey).
autossh[3469]: ssh exited with error status 255; restarting ssh
そのため、-fオプションを使用すると、autosshがIDファイル(-i myIdFile
)を受け入れないようです。何故ですか?
(Raspianではautossh 1.4c)
Autosshがバックグラウンドにドロップすると(-fオプション)、作業ディレクトリが変更されるようです。つまり、相対パスが機能しなくなります。またはより具体的に:idファイルの絶対パスを入力によって、おそらく成功します。
デフォルト以外の場所にパスワードなしのキーを作成して、シナリオを再作成しました。
~/$ mkdir test
~/$ cd test
~/test$ ssh-keygen -f test_id_rsa
Enterキーを2回押すだけで、パスワードで保護されていないキーを生成します。
新しいキーをサーバーにコピーしました(現在、パスワード認証が可能です)。
~/test$ ssh-copy-id -i test_id_rsa user@server
最初に、キーが通常のsshで機能していることを確認してから、autosshを使用しました
~/test$ ssh -i test_id_rsa user@server
~/test$ autossh -M 13000 -N -i test_id_rsa user@server
^C
どちらも問題なく動作したので、私はあなたが抱えていた問題を再現しました。
~/test$ autossh -f -M 13000 -N -i test_id_rsa user@server
これは機能せず、以下が/var/log/syslog
に書き込まれました:
autossh [2406]:sshがステータス255で途中で終了しました。 autossh終了
ただし、キーファイルのパスを絶対パスに変更すると、次のように機能します。
~/test$ autossh -f -M 13000 -N -i /home/user/test/test_id_rsa user@server
/var/log/syslog
にエラーはありません。
-fで何が起こっているのかわからないが、それをNohupすることもできます。
Nohup autossh -M 33201 -N -f -i myIdFile -R 33101:localhost:22 [email protected] &
次のパラメータをSSHに追加して、「接続を続行しますか?(はい/いいえ)」をバイパスします。
-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
最後のコマンドは次の形式になります。
autossh -f -M $BASE_PORT -N -R $LOCAL_PORT:$LOCALHOST:$REMOTE_PORT $USER@$SERVER -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no