使用 sshpass 进行多跳

使用 sshpass 进行多跳

我想用来.ssh/config通过网关连接到主机。我不想设置 RSA 密钥而必须使用密码。我以前做过这种没有密码的跳跃。现在尝试用密码来做到这一点。

对我有用的直接命令是:

sshpass -p mypassword ssh -o ProxyCommand="ssh gateway -W %h:%p" myusername@myip

我已经在网关中设置了密钥身份验证,其详细信息位于我的 .ssh/config 中。为了在 中进行设置.ssh/config,我尝试了以下操作:

Host h_act
      <username, hostname, port etc.>
      ProxyCommand ssh gateway -W %h:%p
Host h
      ProxyCommand sshpass -p mypassword ssh h_act

然而,当我尝试时ssh h,我得到了Pseudo-terminal will not be allocated as stdin is not a terminal。我尝试-vtt使用 ssh 获取奇怪的消息,但没有终端。我知道当有一个 ProxyCommand 链netcat/nc或只有一个ProxyCommand 链时ssh -W,它就会起作用。但在这里,它不起作用。即使当我在没有 sshpass 的情况下尝试最后一个命令时,我也会收到相同的错误。我猜测这与 ProxyCommand 对后续命令的某些期望有关,但我无法实现它们。

有任何想法吗?

答案1

我不认为你的配置与那一行相同,它看起来更像是这样的:

ssh -o ProxyCommand='sshpass -p mypassword ssh -o ProxyCommand="ssh gateway -W %h:%p" h_act' myusername@myip 

即您sshpass在 ProxyCommand 内运行。

但我认为这不会起作用,将客户端sshpass包装ssh在伪终端中,隐藏密码实际上来自文件或除终端用户输入之外的其他内容的事实。为此,它需要在ssh客户端运行之前运行。

如果您的第一个单行代码有效,但您只是不想sshpass每次都输入,则可以将其包装在 shell 脚本中:

#/bin/sh
sshpass -f passwordfile ssh -o ProxyCommand="ssh gateway -W %h:%p" "$@"

然后运行类似的东西sshscript myusername@myip

顺便说一句,不要使用,只要客户端(和)运行sshpass -p,它就会使密码在输出中可见。更好地使用通过环境传递密码,或从文件中读取它。pssshsshpasssshpass -esshpass -f file

相关内容