我可以使用OS X钥匙串中的密码自动登录ssh吗?

柴坦亚古普塔

我需要登录到不支持基于密钥的身份验证的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).

无论如何,我可以登录到该服务器而不必每次都输入密码吗?

笔记

  1. 我在钥匙串中使用的方案如下所示
    • 种类:互联网密码
    • 帐号:用户名
    • 其中:ssh:// server-name
柴坦亚古普塔

我找到了一个解决方案(感谢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

需要注意的几点:

  1. 假设您已按照我在问题中描述的方式将密码存储在钥匙串中

  2. 给出的程序SSH_ASKPASS将不带任何参数地被调用;因此我们使用环境变量将用户名和主机名传递给它。

现在,我们可以设置SSH_PASSWORD_USERSSH_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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章