ssh ProxyJump 和基于主机的身份验证的端口转发

ssh ProxyJump 和基于主机的身份验证的端口转发

我正在尝试通过集群的头节点和公共入口节点访问集群上的计算节点。入口节点和头节点上均已知用户,但不是 并且在计算节点上。但是,计算节点上没有密码。通过基于主机的身份验证即可访问计算节点。如果我单独执行每个步骤,则可以登录到计算节点。

但是,我希望使用一个 SSH 命令来完成此操作(因为我实际上只需要将端口从计算节点转发到本地计算机)。如果我这样做

ssh -v -J public.node.com,head.cluster.com node01

然后我收到错误

debug1: Next authentication method: password
joedoe@node01's password: 
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password,hostbased
Permission denied, please try again.
joedoe@node01's password: 
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password,hostbased
Permission denied, please try again.
joedoe@node01's password: 
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password,hostbased
debug1: No more authentication methods to try.
joedoe@node01: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password,hostbased).
debug1: channel 0: free: direct-tcpip: listening port 0 for node01 port 22, connect from 127.0.0.1 port 65535 to UNKNOWN port 65536, nchannels 1
Killed by signal 1.
debug1: channel 0: free: direct-tcpip: listening port 0 for head.cluster.com port 22, connect from 127.0.0.1 port 65535 to UNKNOWN port 65536, nchannels 1
Killed by signal 1.

我怎样才能阻止身份验证方法失败password而受到hostbased考虑?

答案1

据我所知,基于主机的身份验证在 ssh 客户端和服务器中都是默认禁用的。除了从 sshd 配置中启用该功能外,还必须在全局 ssh 客户端配置node01中启用该功能。head.cluster.com

从这里关于基于 ssh 主机的身份验证如何工作的解释:https://hea-www.harvard.edu/~fine/Tech/ssh-host-based.html

基于主机的身份验证依赖于ssh-keysign 辅助程序来访问本地主机密钥并生成基于主机的身份验证所需的数字签名。

您的问题可能是head.cluster.com使用 ProxyJump 时不使用 的 ssh 客户端配置,而只使用本地计算机的 ssh 客户端配置。并且本地计算机上的基于主机的身份验证均已禁用,因此您无法访问 所需的私钥head.cluster.com

因此,仅HostbasedAuthentication yes在本地机器上进行设置是不够的。

我认为您无法避免在 head.cluster.com 上实际启动 ssh 客户端。

因此,您不必一直使用 ProxyJump,而只能使用该选项到达 head.cluster.com,然后从那里启动 ssh。
但您仍然可以用一个命令完成此操作:

 ssh -tt -J public.node.com head.cluster.com ssh -tt node01

-tt即使 ssh 没有本地 tty,多个选项也会强制分配 tty。

在此基础上添加端口转发留给读者练习。(换句话说,我不知道,也不想知道。)

答案2

我通过以下方式实现了我的愿望:

ssh -N [email protected] -J public.node.com -L 12345:node01:12345

因此,我只是通过跳转主机登录到头节点,然后将我的本地端口转发到集群节点的端口。基于主机的身份验证允许转发工作,而无需集群节点的密码。我没有意识到参与端口转发的主机可以是第三台主机,它既不是主要参数ssh也不是跳转主机,在我的例子中是集群节点。

相关内容