![sshpass 通过常规 ssh 客户端](https://linux22.com/image/14893/sshpass%20%E9%80%9A%E8%BF%87%E5%B8%B8%E8%A7%84%20ssh%20%E5%AE%A2%E6%88%B7%E7%AB%AF.png)
我正在使用一个使用/usr/bin/ssh
并需要无密码身份验证的应用程序。同时我想将其与需要的服务器一起使用两个都公钥和密码同时验证。在大多数情况下,仅使用sshpass
是一个很好的解决方案(假设我的秘密密码是安全的,并且我同时也使用安全的公钥身份验证),但sshpass
回绕ssh
而不是相反。
被调用sshpass
时如何使用?/usr/bin/ssh x
我当前的解决方法是下面的配置。它可以工作,但它从目标服务器跳到自身。我宁愿没有这个开销。
Host x
HostName xxx.xxx.xx
ProxyCommand sshpass -f passwordfile ssh -W %h:%p xxx.xxx.xx
有没有办法在不跳到服务器本身的情况下获得相同的结果?
(否则 - 对于未来遇到同样问题的人 - 上面的配置是一个可行的解决方案。)
答案1
鉴于我使用的应用程序是一个搜索ssh
in的 CLI 程序$PATH
,可以修改 PATH 以包含ssh
实际上是sshpass
包装器的特殊命令。
包装sshpass
成一个名为的可执行文件ssh
:
/path/to/bin/ssh
:
#!/usr/bin/env bash
sshpass -f /path/to/passwordfile ssh "$@"
然后在运行时将自定义的父目录添加ssh
到 PATH 中,方法是在或myapp
中添加以下别名:.zshrc
.bashrc
alias myapp="PATH=/path/to/bin:$PATH myapp"