我有一台笔记本电脑,我在工作和家里都使用它。
当我工作时,我可以直接 ssh 到任何我喜欢的服务器。
当我在家时,我必须通过跳转主机才能连接到网络。
我有一些条目,例如:
Host jump-server
hostname server1
proxyjump workproxy
但我有很多服务器,以及一些我使用 ssh 到特定主机的脚本(这意味着它们都需要命令行选项来指定是否使用跳转主机)。
有没有办法自动执行此操作?例如,我可以设置一个环境选项,以便所有主机(workproxy 除外)都应该 proxyjump 吗?
答案1
这可以用 aProxyCommand
代替 来完成ProxyJump
。ProxyCommand
这里可能是一个 shell 脚本,用于检查某些变量并运行不同的命令。例如,您可以有一个/some/proxy
如下脚本:
#! /bin/sh
if [ -n "$WORK" ] && [ "$1" != workproxy ]
then
echo Work >&2
ssh -qW "$1:$2" workproxy
else
nc "$1" "$2"
fi
和 SSH 配置:
Host *
ProxyCommand /some/proxy %h %p
这会检查WORK
环境变量是否不为空,并且主机不为空workproxy
并连接到workproxy。否则,它使用 netcat 连接到给定的主机和端口(实际上是直接连接)。
答案2
这不是一个具体的答案,但您可能会从中得到一些想法维基教科书“代理和跳转主机食谱”。
如果您使用Host *
and ProxyCommand
with%h
作为主机,您也许可以编写通用规则。并且Match
可以像Host
但允许您使用exec
一个命令来帮助减少*
仅匹配您想要的那些名称。