如何使用sshpass?

Rom*_*dgz 36 ssh command-line

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

如果我手动输入控制台:

ssh -p 22 user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
Run Code Online (Sandbox Code Playgroud)

完美运行,但要求输入密码。所以我尝试运行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'
Run Code Online (Sandbox Code Playgroud)

他们都没有工作。

exh*_*uma 38

这可能是由ssh. 它看起来像sshpass上无效的主机密钥保持沉默(不输出对双方都不利stderr,也不stdout),并与状态代码存在6。在撰写本文时,这是第 50 版,代码中的匹配常量是RETURN_HOST_KEY_UNKNOWN,这暗示了该错误。

您的错误代码可能会有所不同,查看上面链接的代码可能会让您有所了解。

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

sshpass -pfoobar ssh -o StrictHostKeyChecking=no user@host command_to_run
Run Code Online (Sandbox Code Playgroud)

  • 使用 brew install 时,-p 后需要一个空格。https://github.com/hudochenkov/homebrew-sshpass (2认同)

rjs*_*rjs 9

sshpass命令仅在密码提示以assword:.

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

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

  • 对不起?`-P提示 sshpass 应该搜索哪个字符串来检测密码提示` (3认同)
  • 这个新选项(至少需要 sshpass V1.0.6)解决了这个问题。 (3认同)

小智 6

我想你想要这样的东西:

sshpass -p yourpassword ssh user@ipaddress somecommand
Run Code Online (Sandbox Code Playgroud)

例如,这对我有用:

sshpass -p mypassword ssh username@10.0.0.9 touch foo
Run Code Online (Sandbox Code Playgroud)