为了避免每次我将它们添加到时都需要输入细节~/.ssh/config
:
$ awk '/Host socks-proxy/' RS= ~/.ssh/config
Host socks-proxy
Hostname pcit
BatchMode yes
RequestTTY no
Compression yes
DynamicForward localhost:9118
然后,我创建了一个systemd用户服务单元定义文件:
$ cat ~/.config/systemd/user/SocksProxy.service
[Unit]
Description=SocksProxy Over Bridge Host
[Service]
ExecStart=/usr/bin/ssh -Nk socks-proxy
[Install]
WantedBy=default.target
我让守护程序重新加载新的服务定义,启用新服务,启动它,检查其状态,并验证它是否在侦听:
$ systemctl --user daemon-reload
$ systemctl --user list-unit-files | grep SocksP
SocksProxy.service disabled
$ systemctl --user enable SocksProxy.service
Created symlink from ~/.config/systemd/user/default.target.wants/SocksProxy.service to ~/.config/systemd/user/SocksProxy.service.
$ systemctl --user start SocksProxy.service
$ systemctl --user status SocksProxy.service
● SocksProxy.service - SocksProxy Over Bridge Host
Loaded: loaded (/home/alex/.config/systemd/user/SocksProxy.service; enabled)
Active: active (running) since Thu 2017-08-03 10:45:29 CEST; 2s ago
Main PID: 26490 (ssh)
CGroup: /user.slice/user-1000.slice/user@1000.service/SocksProxy.service
└─26490 /usr/bin/ssh -Nk socks-proxy
$ netstat -tnlp | grep 118
tcp 0 0 127.0.0.1:9118 0.0.0.0:* LISTEN
tcp6 0 0 ::1:9118 :::* LISTEN
这按预期工作。然后,我想避免通过使用systemd 套接字激活进行按需(重新)派生而手动启动该服务或使用autossh永久运行该服务。那没有用,我认为(我的版本)无法接收套接字文件描述符。 ssh
我找到的文档(1,2),和一个例子使用systemd-socket-proxyd
-工具来创建2“包装”服务,“服务”和“插座”:
$ cat ~/.config/systemd/user/SocksProxyHelper.socket
[Unit]
Description=On Demand Socks proxy into Work
[Socket]
ListenStream=8118
#BindToDevice=lo
#Accept=yes
[Install]
WantedBy=sockets.target
$ cat ~/.config/systemd/user/SocksProxyHelper.service
[Unit]
Description=On demand Work Socks tunnel
After=network.target SocksProxyHelper.socket
Requires=SocksProxyHelper.socket SocksProxy.service
After=SocksProxy.service
[Service]
#Type=simple
#Accept=false
ExecStart=/lib/systemd/systemd-socket-proxyd 127.0.0.1:9118
TimeoutStopSec=5
[Install]
WantedBy=multi-user.target
$ systemctl --user daemon-reload
这似乎有效,直到ssh
死亡或被杀死。然后它不会在应有的下一次连接尝试时重新生成。
问题:
- / usr / bin / ssh真的不能接受通过systemd的套接字吗?还是只有较新的版本?Mine是up2date Debian 8.9中的一个。
- 仅root用户可以使用该
BindTodevice
选项吗? - 为什么旧隧道消失后,我的代理服务在第一个新连接上无法正确重生?
- 这是设置“按需ssh袜子代理”的正确方法吗?如果不是,您该怎么做?
autossh
。
autossh
如果连接失败(尽管不是系统方式),则应注意重新连接。