我经常需要从特定集群(集群中的所有机器都相同)通过 ssh 连接到任意计算机。但是,集群中的可用机器集经常更改,因此我有一个脚本可以从集群中返回一个任意主机名,该主机名可用并符合我的要求(例如,在线并运行正确的操作系统)。
另请注意,我使用 Kerberos (GSSAPIAuthentication) 凭据转发进行身份验证。
现在,我 ssh 使用ssh `get_host`
. 我想改为执行ssh cluster
. 使用已知的主机名,这很容易在以下内容中进行/ssh/config
:
Host cluster
HostName static_host.cluster.domain.tld
GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes
Run Code Online (Sandbox Code Playgroud)
如何HostName
使用我的脚本动态选择?(或者 SSH 是否有不同的方法来支持我想要的功能?)我想做类似以下的事情,但它不起作用:
Host cluster
HostName `get_host` # This does not work
...
Run Code Online (Sandbox Code Playgroud)
Grawity表明ProxyCommand
可以是一个脚本,它获取主机名并ssh
使用netcat
或将连接转发给它socat
。但是,这不会转发 Kerberos 凭据。对此的帮助也表示赞赏。
编辑:
您不能像我希望的那样使用 Kerberos 执行此操作(请参阅已接受答案中的评论)。所以,我使用这个脚本ssh-wrapper
作为ssh
别名对ssh
命令行参数进行动态重写。它并不健壮,但对我有用。
Host cluster
HostName static_host.cluster.domain.tld
GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes
Run Code Online (Sandbox Code Playgroud) ssh ×1