首页 > 解决方案 > Systemd SSH隧道服务失败,而命令在命令行中工作

问题描述

我一直在尝试设置一个 SSH 反向隧道 Systemd 服务,用于自动将我的非公共 IP 计算机公开到 Internet 以进行 SSH。我有两种不同的服务,一种指向我自己的服务器(另一台具有公共 IP 的计算机),它工作正常,另一种尝试使用serveo.net(通过 ssh 客户端的 TCP 隧道免费服务)。我的服务对我自己的服务器运行良好,但对 Serveo 失败。

我的服务定义如下:

[Unit]
Description=Setup a remote tunnel to serveo.net
Wants=network-online.target
After=network-online.target
StartLimitIntervalSec=0

[Service]
User=ssh-tunnel
Group=ssh-tunnel
ExecStart=/usr/bin/ssh -T -o ServerAliveInterval=60 -i /var/lib/ssh-tunnel/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ExitOnForwardFailure=yes -R myalias:58227:localhost:22 serveo.net
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target

在终端中执行相同的命令时,它可以正常工作:

sudo -u ssh-tunnel -g ssh-tunnel /usr/bin/ssh -T -o ServerAliveInterval=60 -i /var/lib/ssh-tunnel/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ExitOnForwardFailure=yes -R myalias:58227:localhost:22 serveo.net

我可以看到我自己的服务器和 Serveo 之间的唯一行为差异是 Serveo 具有一种交互式命令界面。

有人对 Systemd 服务有类似的问题吗?

标签: sshsystemdssh-tunnel

解决方案


Serveo 需要一个交互式外壳。你想添加

[服务] StandardInput=tty-force

强制使用与 serveo 配置一起使用的 shell


推荐阅读