当前位置: 首页>>技术教程>>正文


如何使用 sshpass?

,

问题描述

我需要使用 sshpass 从 Java 代码通过 SSH 启动远程命令。

如果我手动输入控制台:

ssh -p 22 user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'

完美运行,但要求输入密码。所以我尝试运行 sshpass

sshpass -p mypass ssh -p 22 user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
sshpass -p mypass ssh -l user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
sshpass -p mypass ssh -t user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
sshpass -p mypass ssh user@ipaddress echo 'OK'

他们都没有工作。

最佳方案

这可能是由 ssh 完成的 host-key 检查引起的。看起来 sshpass 对无效的主机密钥保持沉默(在 stderrstdout 上都没有输出)并且与 status-code 6 存在。在撰写本文时,这是修订版 50,代码中的匹配常量是 RETURN_HOST_KEY_UNKNOWN,这暗示了该错误。

您的 error-code 可能会有所不同,查看上面链接的代码可能会给您一些见解。

如果您的问题是无效的 host-key,您应该三思而后行是否使用 CLI 选项覆盖错误。您的机器可能会受到威胁,或者您可能会受到 MITM 攻击!如果您 100% 确定不是这种情况,并且无法使已验证的 host-keys 保持最新,则可以使用如下命令:

sshpass -pfoobar ssh -o StrictHostKeyChecking=no user@host command_to_run

次佳方案

sshpass 命令仅在密码提示以 assword: 结尾时才有效。

如果您的密码提示不同,您可能需要调整 sshpass 的源代码以识别您的提示。

我在某些系统上看到过像 Password for user@host: 这样的密码提示,也许这是你的问题。

第三种方案

我想你想要这样的东西:

sshpass -p yourpassword ssh user@ipaddress somecommand

例如,这对我有用:

sshpass -p mypassword ssh username@10.0.0.9 touch foo

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12573.html,未经允许,请勿转载。