我在公司有一台台式电脑,我喜欢使用通过 SSH 连接的 Unison 将其与家里的电脑保持同步。我有时也喜欢使用 SSH 远程登录到工作电脑。
我的工作网络正在启动一项新策略,该策略仅允许通过 VPN 进行网络外部的连接。
有没有什么方法可以调整我的 SSH 配置,以便每当它尝试登录到工作计算机时,它都会通过工作 VPN?
需要明确的是,我不想每次想要通过 SSH 连接到工作计算机时都必须手动连接到工作 VPN。我也不想一直连接到工作 VPN。
请注意,我可以自由更改客户端(我的家用电脑)和服务器(工作电脑)的 SSH 配置。另外,我认为这没什么关系,但所有涉及的机器都是 Linux 机器。我使用的是 OpenSSH,工作 VPN 是 openVPN。
澄清:我不想永久连接到工作 VPN 的主要原因是不必担心遵守他们的服务条款。所以我只希望通过 VPN 发送 SSH 流量,而不发送其他流量。
答案1
我想到了一些选择。
Shell 脚本
你可以编写一个 shell 脚本
- 启动 openVPN
- 启动 SSH
当 SSH 断开连接时停止 openVPN
#!/bin/bash /usr/bin/openvpn /home/user/ovpn/config.ovpn ssh user@host pkill -SIGTERM -f 'openvpn --conf /home/user/ovpn/config.ovpn'
此后,您可以为其添加别名,例如alias vpnssh='/home/scriptname.sh'
,和/或将其添加到您的.bashrc
。
代理命令
您可以尝试使用 openSSH 来proxycommand
实现此目的:
ssh -o ProxyCommand="/usr/bin/openvpn /home/user/ovpn/config.ovpn" user@host
在两种情况下
您需要告诉 openVPN 您不想通过隧道路由所有内容。因此,假设 192.168.0.1 是您的工作桌面,请将以下内容添加到您的 openVPN 配置文件中
route-nopull route 192.168.0.1 255.255.255.255
route 192.168.0.0 255.255.255.0
如果您想覆盖整个子网则使用。
答案2
假设您有一个通过隧道连接到 OpenVPN 服务器/主机的客户端 PC。
对于通过 VPN 隧道的 SSH:https://askubuntu.com/questions/1069846/connected-to-openvpn-server-but-cant-ssh
在 Openvpn 主机上:
$sudo ufw enable
$ sudo ufw allow 1194/udp comment "Allowing OpenVPN Connections"
$ sudo ufw allow from 10.8.0.1/24 to any port 22 proto tcp comment "SSH allowed for VPN clients"
在客户端:
确保 OpenSSH 已安装并正在运行,并且防火墙上的端口 22 已打开。
然后:
$ ssh [email protected] (change “user” to your login name on the server/host).