首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >autossh是否与systemd冗余?

autossh是否与systemd冗余?
EN

Unix & Linux用户
提问于 2018-02-13 10:40:36
回答 2查看 5.6K关注 0票数 19

在创建持久反向SSH隧道时,autossh对运行系统的系统有用吗?通常,autossh是由选项-M设置为零的服务运行的,该选项将禁用对链接的监视。这意味着在autossh重新启动它之前,ssh必须退出。从手册页:

将监视端口设置为0会关闭监视函数,autossh只会在ssh退出时重新启动ssh。例如,如果您使用的是最新版本的OpenSSH,您可能希望探索使用ServerAliveInterval和ServerAliveCountMax选项让SSH客户端退出,如果它发现自己不再连接到服务器。在许多方面,这可能是一个比监视端口更好的解决方案。

看起来,systemd服务本身就能够使用包含以下选项的服务文件来完成此操作:

代码语言:javascript
复制
Type=simple
Restart=always
RestartSec=10

那么,当系统d服务运行时,autossh是否是多余的?还是做其他有助于保持SSH连接的事情?

谢谢。

EN

回答 2

Unix & Linux用户

发布于 2020-08-12 03:52:49

谢谢你提了个好问题。我使用autossh -M 0运行了一个systemd服务。刚刚意识到使用autossh和systemd是多余的。

这是我的新服务,不用自动投递。它运行良好,即使我亲自杀死ssh进程也会重新启动。

代码语言:javascript
复制
[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

如何启动服务:

  1. 在服务器上创建ssh隧道用户(不要授予root权限)
  2. 将未加密的RSA密钥"id_rsa_insecure“放在这里/root/..ssh/。您应该将公共部分放在/home/ssh隧道/..ssh/authorized_key中的服务器上。
  3. 使用上面的代码创建一个文件"autossh.service“,并将其放在/etc/systemd/system中。
  4. 运行以下命令
代码语言:javascript
复制
sudo systemctl daemon-reload
sudo systemctl start autossh
sudo systemctl enable autossh

一些解释性说明:

代码语言:javascript
复制
ExitOnForwardFailure

这是我第一次错过的。如果没有这个选项,如果端口转发由于某种原因而失败(相信我),SSH隧道将存在,但它将是无用的。所以它需要被杀死并重新启动。

代码语言:javascript
复制
/root/.ssh/id_rsa_insecure

正如您可以从名称中看到的那样,密钥没有加密,因此必须是一个特殊密钥,并且必须限制具有此密钥的用户在服务器端执行任何操作,但必须创建反向通道。简单的方法是限制服务器端authorized_keys文件中的行为。

代码语言:javascript
复制
# /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隧道”用户(只允许特定的端口转发)--但我没有现成的代码。如果有人有密码的话请告诉我。

我很想听听我目前的解决方案中的任何安全问题。谢谢

票数 11
EN

Unix & Linux用户

发布于 2018-02-14 14:57:58

因为这两种方法都比较容易尝试,所以测试这两种方法的可靠性并自己确认。

我想你会发现autossh更适合这份工作。autossh设计为在前台运行,而systemd主要是为没有附加到特定TTY的后台服务设计的。

此外,autossh至少有一个特定于任务的特性:

定期(默认情况下每10分钟一次),autossh尝试在监视器转发端口上传递流量。如果失败,autossh将杀死子进程ssh (如果它仍在运行)并启动一个新进程;

因此,autossh所做的不仅仅是保持进程运行,它还确认了ssh连接实际上是工作的。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/423795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档