我想在家里或办公室通过笔记本电脑访问我的家用机器。在办公室,我必须使用网关。为此,我proxycommand
在我的账户中添加了一个条目.ssh/config
,该条目在办公室也可以正常工作。但是,如果我想在家里使用它,我不想依赖办公室网关。有没有办法自动化这个?
答案1
是也不是。
首先,不行。您无法在 ~/.ssh/config 文件中放入任何内容,这些内容会根据外部因素(例如您所在的网络或文件是否存在等)激活不同的设置。SSH 的配置文件是静态文件。
答案是肯定的。你可以“破解”一些东西。它可能不会很漂亮,但可能会有用。
考虑一下 ProxyCommand 的工作原理。它执行命令行,并以 printf 样式替换某些字符串。您可以在该命令行中输入登录信息。例如,您可能在笔记本电脑中安装了类似的东西供在办公室使用:
host athome
ProxyCommand ssh -x -a -q gateway nc athome.dyndns.org 22
该命令启动一个ssh
连接到该服务器的命令gateway
,并在该服务器上启动netcat
以连接到您的实际的目的地。那么,您可以使用 shell 脚本来代替运行 ssh。例如,在您的.ssh/config
文件中使用以下脚本:
host athome
ProxyCommand bin/customconnect athome.dyndns.org
您可以创建一个~/bin/customconnect
脚本:
#!/bin/sh
if /sbin/ifconfig -a | grep -q 'inet 192\.168\.'; then
nc $1 22
else
ssh -x -a -q gateway nc $1 22
fi
然后,假设你家里的网络以 开始192.168
,而办公室的网络没有,则会选择适当的 ProxyCommand按脚本。
如果您想要其他动态功能,例如根据网络选择不同的主机名,您显然也可以将其添加到脚本中。
请注意,此解决方案并非没有成本。通常,SSH 会直接启动您的 ProxyCommand。如果您使用此解决方案,则每个连接都会有一个额外的进程,因为 ssh 会启动一个 shell,而 shell 又会启动另一个进程。