通过环境的 ssh 选项

通过环境的 ssh 选项

我有一台笔记本电脑,我在工作和家里都使用它。

当我工作时,我可以直接 ssh 到任何我喜欢的服务器。

当我在家时,我必须通过跳转主机才能连接到网络。

我有一些条目,例如:

Host jump-server
  hostname server1
  proxyjump workproxy

但我有很多服务器,以及一些我使用 ssh 到特定主机的脚本(这意味着它们都需要命令行选项来指定是否使用跳转主机)。

有没有办法自动执行此操作?例如,我可以设置一个环境选项,以便所有主机(workproxy 除外)都应该 proxyjump 吗?

答案1

这可以用 aProxyCommand代替 来完成ProxyJumpProxyCommand这里可能是一个 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 ProxyCommandwith%h作为主机,您也许可以编写通用规则。并且Match可以像Host但允许您使用exec一个命令来帮助减少*仅匹配您想要的那些名称。

相关内容