我正在尝试设置 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
嘘。虽然我花了一个多小时在这里仔细研究问题和答案,并查看duckduckgo结果,但当我提交问题时,答案就给了我答案。线索就在绑定地址中:172.17.0.1 是一个 docker 接口。问题是我正在监听 docker 接口,但从未告诉脚本等待 docker。
所以,我将第2行修改为
After=network-online.target docker.service
重新启动后,一切都按预期进行。