我经常处于一个因某些愚蠢原因而阻止 TCP 目标端口 22 的网络中。使用完整的 VPN 来解决这个问题似乎并不实际,所以我有时使用 SSH 代理(通过ProxyCommand
),有时使用伪代理-使用ssh -w any:any -p 443
本地和远程ip
命令行组合的VPN。
我使用 SSH 作为 Git 的后端,因此无法直接更改ssh
命令行。
我正在寻找一种干净而好的方法来临时(例如通过简单的脚本或环境变量)通过具有可通过 TCP 端口 443 访问的 SSH 的服务器来联系 Git 服务器,例如 GitHub 和 Fedora distgit。我不坚持ProxyCommand
或-w
作为方法。
答案1
您可以将ProxyCommand
和Tunnel
with都存储TunnelDevice
在您的ssh_config
. Git 尊重您ssh
在~/.ssh/config
.
此外,在 Fedora 25(openssh-7.3 或来自铜矿),您可以使用Include
指令来使用配置中的单个字符修改您的配置,例如:
# ~/.ssh/config
#Include ~/.ssh/config_proxy
Host github.com
# some standard configuration
# ~/.ssh/config_proxy
Host github.com
ProxyCommand something
如果您愿意,您当然可以使用 simple 来编写此更改的脚本sed
。
答案2
使用最新版本的 OpenSSH 客户端,您可以将条件设置放入您的.ssh/config
.因此,您可以ProxyCommand
在条件节内设置该行。除了基于目标的条件(此处无用)之外,您还可以有一个包含运行外部命令的条件。使用命令来检测您是否位于需要代理的网络中,例如通过检查您的 DHCP 租约。
Match exec "awk /var/lib/dhcp/dhclient.eth0.leases '$2 == \"domain-name-servers\" {nsip=$3} END {exit(nsip == \"192.0\.2\.1\")}'"
ProxyCommand …