我需要登录到不支持基于密钥的身份验证的ssh服务器。而且我不想每次都输入密码。
我正在使用OS X Lion(10.7.2)。我已将密码添加到OS X钥匙串[1]。现在,我可以使用来自动从钥匙串中检索密码/usr/bin/security
,但是找不到将密码发送到ssh提示符的方法。
我也试过了sshpass
。但是,当我尝试运行它时,ssh退出并显示以下错误:
ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
Permission denied, please try again.
ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
Permission denied, please try again.
ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
Permission denied (publickey,password).
无论如何,我可以登录到该服务器而不必每次都输入密码吗?
笔记
我找到了一个解决方案(感谢Daniel Beck提供了所需的关键信息)。请注意,我仅使用OS X Lion 10.7.2进行了测试。如果这对您不起作用,请尝试Daniel的解决方案。
首先,我们需要设置SSH_ASKPASS
环境变量-它的值应该是将密码输出到标准输出的程序的路径。要从钥匙串中获取密码,这是它的外观(我称之为get-ssh-password.sh
):
#!/bin/bash
/usr/bin/security find-internet-password -a "$SSH_PASSWORD_USER" -s "$SSH_PASSWORD_HOSTNAME" -r "ssh " -g 2>&1 1>/dev/null | cut -d\" -f2
需要注意的几点:
假设您已按照我在问题中描述的方式将密码存储在钥匙串中
给出的程序SSH_ASKPASS
将不带任何参数地被调用;因此我们使用环境变量将用户名和主机名传递给它。
现在,我们可以设置SSH_PASSWORD_USER
并SSH_PASSWORD_HOSTNAME
运行sshpass
以登录到我们的服务器。
我创建了另一个脚本ssh-kcpass
,以执行此操作:
#!/bin/bash
export SSH_ASKPASS=~/bin/get-ssh-password.sh
export SSH_PASSWORD_USER=$(echo "$1" | cut -d@ -f1)
export SSH_PASSWORD_HOSTNAME=$(echo "$1" | cut -d@ -f2)
sshpass ssh "$1"
要登录ssh服务器而不输入任何密码,您只需要运行ssh-kcpass user@hostname
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句