我妈妈有一台小型笔记本电脑,在启动时需要通过反向 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
过去两年来,我一直使用这种配置来解决类似的任务 - 效果非常好。不过,这里有一些参考: