マシンの起動直後に確立されるホームサーバーへのトンネルを設定したいと思います。 この回答 を使用して、起動時に実行するように設定されたサービス内にautossh
コマンドを設定しました。トンネルがインターネット上で機能し、これに対応するダイナミックDNSサービスが必要です。
サービスを手動で実行すると、トンネルは正常に接続されます。この問題は、起動後にサービスが自動的に起動されるときに発生します。サービスは正常に開始されますが、ホスト名を解決できないため、サーバーへの接続が確立されません。
ssh child pid is 1413
ssh: Could not resolve hostname my.Host.name: Temporary failure in name resolution
ssh exited with error status 255; restarting ssh
私のサービスファイルは次のとおりです。
[Unit]
Description=Creates tunnel to server
After=network.target
[Service]
User=james
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -M 0 -o "StrictHostKeyChecking=no" -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -NR 3030:localhost:22 [email protected]
[Install]
WantedBy=multi-user.target
これを回避する方法はありますか?
申し訳ありませんが、私が注意を払っていなかったエラーがあったことが判明しました:
Error: remote port forwarding failed for listen port 3030
このエラーは、could not resolve hostname
エラーの後に表示されます。
エラーの原因はわかりませんが、ExitOnForwardFailure yes
に/etc/ssh/ssh_config
を追加することで回避できました。これにより、エラーがスローされたときにssh
セッションが終了します。
このエラーが原因で、基になるssh
セッションがハングしていたようです。これにより、autossh
がサーバーに再接続しようとするのを防ぎました。この設定の変更により、autossh
は、エラーがスローされたときにssh
接続を再試行しようとします。
autossh
が複数回接続を試みると、systemctl status
はこれらのエラーで溢れかえります。
starting ssh (count 16)
ssh child pid is 2463
Error: remote port forwarding failed for listen port 3030
ssh exited with error status 255; restarting ssh
starting ssh (count 17)
ssh child pid is 2473
Error: remote port forwarding failed for listen port 3030
ssh exited with error status 255; restarting ssh
starting ssh (count 18)
ssh child pid is 2481
以前は、これらのエラーの1つだけが表示され、その後autossh
がハングしていました。
質問に含めたエラーはまだ発生しますが、サービスが最初に実行されたときにネットワーク接続が適切に確立されていない可能性があるため、これは心配する必要はないと思います。
交換
After=network.target
と
After=network-online.target