Mac OS X Lion和sshpass


6

我升级了 Mac OS X Snow Leopard到Lion 。我用了几个脚本 sshpass 但升级到Lion后,出现以下错误:

Permission denied, please try again.
debug1: read_passphrase: can't open /dev/tty: Device not configured
debug1: permanently_drop_suid: 502
ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory

我只能连接 sshpass (或手动输入密码)。没有公钥/私钥。我重新安装了MacPorts和sshpass。

我怎样才能得到 SSH-askpass ?我该如何配置 的/ dev / tty的

映入眼帘!


“配置 /dev/tty “将意味着从终端运行脚本。要获得GUI提示,您需要 ssh-askpass (我不知道为什么你不再拥有它)。
Gilles

我不需要ssh-askpass,但是sshpass需要它......没什么。 0.o我从终端运行所有脚本。我没有脚本的gui。
TheFox

我遇到了同样的问题。我在Snow Leopard上使用了一个使用sshpass的应用程序,它运行正常。在Lion上它没有。我收到以下消息:ssh_askpass:exec(/ usr / libexec / ssh-askpass):没有这样的文件或目录有趣的是,雪豹上也不存在/ usr / libexec / ssh-askpass。我在其他网站上看到“没有这样的文件或目录”是一个误导性的消息。有任何想法吗?

Answers:


2

您应首先向服务器管理部门投诉,观察公钥认证比简单密码更安全,但我认为您已经这样做了,而您的管理员只是白痴。

当苹果将其功能集成到ssh,scp和ssh-add中时,Apple遗憾地删除了ssh-askpass。但是有一个SSHKeychain包,为macports的openssh包提供了一个类似Apple的Cocoa密码提示的ssh-askpass。它应该以你想要的方式解决你的问题,甚至可能为你设置SSH_ASKPASS变量。

只是fyi,我通常建议不要安装openssh macports软件包,因为它会破坏你的Apple密码提示,但是一旦安装了SSHKeychain,macports通常会提供比Apple更新的openssh。

当服务器禁用公钥认证时,在脚本中嵌入密码没有任何错误,即如果他们关心安全性,他们应该重新启用公钥。甚至有服务器故意打破sshpass。您可以使用以下expect脚本访问此类计算机:

#!/usr/bin/expect -f
set timeout -1
set send_human {.05 0.1 1 .07 1.5}
eval spawn $argv
match_max 100000
expect {
   -re "USERNAME@(\[0-9A-Za-z_\\-\\.\]+)'s password: "
     { sleep 0.1 ; send -- "PASSWORD\r" ; sleep 0.3 }
}
interact

您可以通过减少睡眠和send_human延迟来加速此脚本。


0

升级到Mac OS X Lion后,我也遇到了类似的问题。我使用Unison将MacBook Pro上的目录与我的Linux服务器同步,但升级后我再也无法连接了。问题是Lion中没有/ usr / libexec / ssh-askpass。要纠正这个问题,你可以去 http://westergaard.eu/2011/07/printing-on-wi-from-mac-os-x-lion/?utm_source=rss&utm_medium=rss&utm_campaign=printing-on-wi-from-mac-os -x狮 。在那里,您可以下载Printer-hack.zip文件。它包含文件ssh-askpass,然后您可以将其移动到/ usr / libexec /。


所以我将zip文件中的ssh-askpass放入/ usr / libexec /。但现在,当我使用“-p”选项时,它似乎是ssh-askpass表单: sshpass -p。这是没有意义的!
TheFox

0

解决此问题的正确方法是删除您安装的所有sshpass内容,并依赖Apple已经为您设置的内容。

默认情况下,ssh-agent已经在运行(一旦你使用它,通过launchd实际上准备运行)。您可以从终端验证这一点 env|grep SSH 应该回来的东西 SSH_AUTH_SOCK=/tmp/launch-7D4wfP/Listeners。如果它看起来不像那样,那么你仍然会覆盖其中一个shell启动脚本中的默认值。

然后,在您的钥匙串中存储您的SSH密钥密码 ssh-add -K。完成后,它会在需要时自动将密钥加载到ssh-agent中。

编辑:哎呀我错过了“没有pubkey auth”位和ssh-pass的作用。好的,尝试将环境变量SSH_ASKPASS设置为打印密码的脚本。这将使ssh执行该脚本而不是ssh_askpass。

可能发生的事情是Lion可能对TTY更严格,它不会接受ssh-pass提供的真实TTY环境。如果是这种情况,则需要修复ssh-pass。也许编译自己的ssh也可能有用。


1
你写的所有内容与这个问题没有任何关系。好的,再一次。一世 不能 使用公钥/私钥方法。它在过去是无法实现的,将来也无法实现。我只有这一种方法可以自动连接到服务器。我必须每天使用ssh连接到十几台服务器并手动复制密码非常烦人。它不能是Apple删除脚本!
TheFox

0

好的,我也遇到过与AIX相同的问题。场景不稳定,有时候命令会执行,有时它会抛出 /dev/tty 错误。

我通过以下方式解决了这个问题: 我出口了 SSH_ASKPASS 到一个将回显密码的shell脚本。 然后跑 ./sshpass -p $password $user@$node hostname。 在这样做时,ssh抱怨的案例 /dev/tty 它产生了 $SSH_ASKPASS 并获取密码。

希望这很有用。我很想认为这更像是一个sshpass错误,但当然没有调试更多。

干杯 Suriyan


好的,我发现我用sshpass版本1.05来解决这个问题。如果我使用sshpass版本1.04我没有看到这个问题。所以,它也与ssh版本有关。 AIX使用较旧的ssh版本。我建议你尝试1.04和1.05版本的sshpass。
Suriyan Ramasami
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.