我知道这个问题已经被提过好几次了(https://superuser.com/questions/606252/how-to-use-sshpass-for-chained-connection和https://unix.stackexchange.com/questions/320412/how-to-use-sshpass-to-supply-a-password-on-the-second-ssh-hop)但我发现的所有解决方案都不起作用。我正在尝试访问第三台机器(third@machine)通过使用sshpass以便不被提示插入密码。但是,必须使用架桥机(bridge@machine)在进入决赛之前。每次我需要输入bridge@machine以及third@machine,所以我的工作流程是:
sshbridge@machine
插入密码:
sshthird@machine
插入密码
到目前为止,我能够通过在~.ssh/config文件内的proxy命令中使用sshpass来避免第一个密码,如下所示:
vi~.ssh/config:
Host *.reference
User example_user
ProxyCommand sshpass -p $bridge_machine_password$ ssh -o StrictHostKeyChecking=no bridge@machine "nc -w 60 `basename %h .reference` %p"
当代我定义了一个别名";居里;在.bashrc文件中,该文件为:
别名curie='shthird@machine.reference'
因此,如果运行别名curie,我可以避免第一个密码,但仍然会提示我输入third@machine.
出于这个原因,我尝试使用sshpass访问third@machine以以下方式:
>sshpass -p 'third_machine_password' ssh -oProxyCommand="ssh -W %h:%p bridge@machine" third@machine
不幸的是,这会带来回报:
Permission denied, please try again.
可能是由third@machine或者我做错了什么?
如果您的密码包含特殊字符,如$。。。例如abcd@1234$$然后将\与特殊字符…一起使用。。。。在每个$$…之前添加此\。。。。它对我有效
找到解决方案:
首先在配置文件中创建代理命令
Host *.reference
User bridge
ProxyCommand sshpass -p passwd_bridge_machine2 ssh -o StrictHostKeyChecking=no bridge@machine2 "nc -w 60 `basename %h .ciment` %p"
在配置中设置了这个命令之后,我在.bashrc文件中创建了别名:
alias curie='sshpass -p passw_third@machine3 ssh third@machine3.reference'
添加.reference行很重要,因为它将首先调用配置文件中的proxycommand,然后在别名中使用sshpass。一旦一切都解决了,只需要在终端中运行别名,就可以在没有任何密码的情况下打开第三台机器。
希望它能帮助其他人