我想用来.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
,它就会使密码在输出中可见。更好地使用通过环境传递密码,或从文件中读取它。ps
ssh
sshpass
sshpass -e
sshpass -f file