如何使用 sshpass?

如何使用 sshpass?

我需要使用sshpassJava 代码通过 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'

但它们都不起作用。

答案1

这可能是由 进行的主机密钥检查引起的ssh。看起来 会对sshpass无效的主机密钥保持沉默(无论是stderr还是 都没有输出stdout),并且状态码为6。在撰写本文时,这是修订版 50,代码中的匹配常量是RETURN_HOST_KEY_UNKNOWN,暗示了该错误。

您的错误代码可能有所不同,查看上面链接的代码可能会给您一些启发。

如果您的问题是无效的主机密钥,您应该仔细考虑是否使用 CLI 选项覆盖错误。您的机器可能已被入侵或者您可能遭受 MITM 攻击!如果您 100% 确定情况并非如此,并且您没有办法使已验证的主机密钥保持最新,则可以使用如下命令:

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

答案2

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

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

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

答案3

我想你想要这样的东西:

sshpass -p yourpassword ssh user@ipaddress somecommand

例如,这对我有用:

sshpass -p mypassword ssh [email protected] touch foo

答案4

sshpass 语法是

sshpass [-ffilename|-dnum|-ppassword|-e] [options] command arguments

请注意,-p 和密码之间没有空格。

另外我注意到您必须至少手动连接 ssh 一次以获取您要连接的机器的 RSA 密钥,然后进入文件,~/.ssh/known_hostssshpass 才会允许您连接。

因此,在获取 known_hosts 文件中的条目后,我可以运行以下命令

sshpass -ffilename_with_password_in_it ssh user@server uname -a

它会在远程服务器上执行命令uname -a,并将结果输出到本地机器的标准输出。

相关内容