監視サーバーの起動時にリモートサーバーにポートを転送するようにautosshサービスを設定しようとしています。ちょっとした詐欺を書いた後、結局は非常に基本的なシステムスクリプトを完成しましたが、一つの問題がありました。起動中はサービスが正常に起動しませんが、手動で起動するか、再起動後すぐにサービスが正常に起動します。
Description=AutoSSH tunnel service for Grafana to access mariadb on remote; local port 33060
After=network-online.target
[Service]
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -M 0 -N [email protected] -i /home/myuser/.ssh/id_rsa -o \"ServerAliveInterval 30\" -o \"ServerAliveCountMax 3\" -L 172.17.0.1:33307:127.0.0.1:3306
[Install]
WantedBy=multi-user.target
起動時に接続できません。 Journalctlの出力は次のようになります。
--
-- The job identifier is 152.
Apr 07 15:25:31 monitoring autossh[752]: port set to 0, monitoring disabled
Apr 07 15:25:31 monitoring autossh[752]: starting ssh (count 1)
Apr 07 15:25:31 monitoring autossh[752]: ssh child pid is 759
Apr 07 15:25:31 monitoring autossh[759]: bind [172.17.0.1]:33307: Cannot assign requested address
Apr 07 15:25:31 monitoring autossh[759]: channel_setup_fwd_listener_tcpip: cannot listen to port: 33307
Apr 07 15:25:31 monitoring autossh[759]: Could not request local forwarding.
すぐに sudo systemctl restart autossh-mariadb-tunnel.service を実行すると、接続が正常に動作します。
答え1
シェン。ここで質問と回答を1時間以上悩み、おかげで結果を見てみましたが、質問を提出したときにその答えが私に与えられました。手がかりはバインディングアドレスにあります。 172.17.0.1はドッカーインターフェースです。問題は、私はdockerインターフェースを聞いていますが、スクリプトにdockerを待つように指示しないことです。
そのため、2行目を次のように修正しました。
After=network-online.target docker.service
再起動すると、すべてが期待どおりに機能します。