在创建持久反向SSH隧道时,autossh对运行系统的系统有用吗?通常,autossh是由选项-M设置为零的服务运行的,该选项将禁用对链接的监视。这意味着在autossh重新启动它之前,ssh必须退出。从手册页:
将监视端口设置为0会关闭监视函数,autossh只会在ssh退出时重新启动ssh。例如,如果您使用的是最新版本的OpenSSH,您可能希望探索使用ServerAliveInterval和ServerAliveCountMax选项让SSH客户端退出,如果它发现自己不再连接到服务器。在许多方面,这可能是一个比监视端口更好的解决方案。
看起来,systemd服务本身就能够使用包含以下选项的服务文件来完成此操作:
Type=simple
Restart=always
RestartSec=10那么,当系统d服务运行时,autossh是否是多余的?还是做其他有助于保持SSH连接的事情?
谢谢。
发布于 2020-08-12 03:52:49
谢谢你提了个好问题。我使用autossh -M 0运行了一个systemd服务。刚刚意识到使用autossh和systemd是多余的。
这是我的新服务,不用自动投递。它运行良好,即使我亲自杀死ssh进程也会重新启动。
[Unit]
Description=autossh
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
ExecStart=
ExecStart=/usr/bin/ssh -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -o ExitOnForwardFailure=yes -R8023:localhost:22 sshtunnel@[address of my server] -N -p 22 -i /root/.ssh/id_rsa_insecure
Restart=always
RestartSec=60
[Install]
WantedBy=multi-user.target如何启动服务:
sudo systemctl daemon-reload
sudo systemctl start autossh
sudo systemctl enable autossh一些解释性说明:
ExitOnForwardFailure这是我第一次错过的。如果没有这个选项,如果端口转发由于某种原因而失败(相信我),SSH隧道将存在,但它将是无用的。所以它需要被杀死并重新启动。
/root/.ssh/id_rsa_insecure正如您可以从名称中看到的那样,密钥没有加密,因此必须是一个特殊密钥,并且必须限制具有此密钥的用户在服务器端执行任何操作,但必须创建反向通道。简单的方法是限制服务器端authorized_keys文件中的行为。
# /home/sshtunnel/.ssh/authorized_keys
command="/bin/true" ssh-rsa [the public key]这样可以防止“ssh隧道”用户启动shell并执行任何命令。
额外安保:
1)服务器端:将/etc/passwd中的shell更改为/bin/false,用于服务器端的“ssh隧道”用户2):在authorized_keys文件中为ssh隧道id_rsa_insecure键添加id_rsa_insecure
我没有尝试但我认为它应该有效:您可以通过配置SELinux用户配置文件来进一步限制“ssh隧道”用户(只允许特定的端口转发)--但我没有现成的代码。如果有人有密码的话请告诉我。
我很想听听我目前的解决方案中的任何安全问题。谢谢
发布于 2018-02-14 14:57:58
因为这两种方法都比较容易尝试,所以测试这两种方法的可靠性并自己确认。
我想你会发现autossh更适合这份工作。autossh设计为在前台运行,而systemd主要是为没有附加到特定TTY的后台服务设计的。
此外,autossh至少有一个特定于任务的特性:
定期(默认情况下每10分钟一次),autossh尝试在监视器转发端口上传递流量。如果失败,autossh将杀死子进程ssh (如果它仍在运行)并启动一个新进程;
因此,autossh所做的不仅仅是保持进程运行,它还确认了ssh连接实际上是工作的。
https://unix.stackexchange.com/questions/423795
复制相似问题