如何让 ssh 命令在启动时运行?

如何让 ssh 命令在启动时运行?

我尝试过输入 ssh 命令/etc/rc.local,但不起作用。

/etc/rc.local:

#!/bin/bash
ssh -fN -R 8080:localhost:80 -i /home/pi/.ssh/id_rsa [email protected] >> /tmp/ssh-nginx.out 2>>/tmp/ssh-nginx.err

/tmp/ssh-nginx.err:

pi@raspberrypi:~ $ cat /tmp/ssh-nginx.err 
ssh: connect to host 50.0.0.1 port 22: Network is unreachable

在 crontab 中添加相同的命令(行是@reboot /etc/init.d/ssh-nginx)会产生相同的输出。

这样做的正确方法是什么?

答案1

我有一个有效的解决方案。如有反馈,我们将不胜感激。

创建一个像这样的 ssh 脚本/usr/local/bin/autossh-tunnel

#!/bin/bash
ssh -N -R 11001:localhost:80 -o ServerAliveInterval=30 -i /home/pi/.ssh/id_rsa [email protected]
# not necessary, but you may want to use autossh instead: /usr/bin/autossh -M 0 -q -N -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 11001:localhost:80 -i /home/pi/.ssh/id_rsa [email protected]

和一个服务文件/etc/systemd/system/autossh-tunnel.service

[Unit]
Description=AutoSSH tunnel
After=network.target

[Service]
ExecStart=/usr/local/bin/autossh-tunnel
# Remove restarts if the command is just a one-off
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target

并运行sudo systemctl enable autossh-tunnel.service以使其在启动时启动。 (现在开始sudo systemctl start autossh-tunnel.service

另外,请考虑使用 VPN 而不是 SSH 隧道。

相关内容