如何使用 systemd 在 Ubuntu 启动时启动和维护反向 SSH 连接?

如何使用 systemd 在 Ubuntu 启动时启动和维护反向 SSH 连接?

我妈妈有一台小型笔记本电脑,在启动时需要通过反向 SSH 连接到服务器(这样我就可以随时提供帮助)。

我正在努力让连接在由 启动时持续下去systemd

/reverse_SSH.sh有类似这样的事情:

#!/bin/bash
while true; do
    ssh -R 19123:localhost:22 [email protected]
    sleep 1000
done

/etc/systemd/system/reverse_SSH.service有类似这样的事情:

[Unit]
Description=reverse-SSH

[Service]
Type=fork
ExecStart=/reverse_SSH.sh

[Install]
WantedBy=multi-user.target

当我运行 时sudo systemctl start reverse_SSH,SSH 连接确实似乎发生了,并且可以在 的输出中看到服务器的 MOTD sudo systemctl status reverse_SSH,但 SSH 连接似乎没有持续,我无法使用类似 的命令访问服务器上的机器ssh sonnyboy@localhost -p 19123

我做错了什么?谢谢!

答案1

我更愿意使用autossh此类服务​​的软件包。因此首先安装它:

sudo apt update && sudo apt install autossh

然后通过在目录中创建一个新文件来为您的连接创建配置条目/etc/ssh/ssh_config.d/。我们称之为reverse.ssh.www.example.org.conf。以下是一个例子:

sudo nano /etc/ssh/ssh_config.d/reverse.ssh.www.example.org.conf
# This file is loaded by /etc/ssh/ssh_config
Host reverse.ssh.www.example.org
    HostName www.example.org
    IdentityFile /root/.ssh/your_passles_id_rsa
    User mum
    Port 22
    RemoteForward 19123 127.0.0.1:22
    GatewayPorts yes
    Compression yes
  • 请注意,SSH 密钥由 root 用户拥有,root 用户将通过我们的服务管理连接。
  • 最后两个选项不是强制性的。

最后创建服务:

sudo nano /etc/systemd/system/reverse-autossh-www-example-org.service
[Unit]
Description=Keeps a resident tunnel to www.example.org open
#After=network.target
After=network-online.target

[Service]
User=root
ExecStart=/usr/bin/autossh -M 0 -N -q -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" reverse.ssh.www.example.org
ExecStop=/usr/bin/killall -s KILL autossh
#ExecStop=/bin/kill $MAINPID
Restart=always
RestartSec=3
#Environment=AUTOSSH_GATETIME=0

[Install]
WantedBy=multi-user.target

启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable reverse-autossh-www-example-org.service
sudo systemctl start reverse-autossh-www-example-org.service

过去两年来,我一直使用这种配置来解决类似的任务 - 效果非常好。不过,这里有一些参考:

相关内容