我有一个 bash 脚本,它使用 sshpass 和 ssh 自动登录到不同的机器并触发命令。当从命令行触发时,bash 脚本运行良好,但当从 java 应用程序调用它时,它无法继续。
sshpass -p 'password' ssh <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="88fdfbedfac8d0d0d0a6d0d0d0a6d0d0d0a6d0d0d0" rel="noreferrer noopener nofollow">[email protected]</a> './SleepDisplay && exit'
bash脚本做了很多其他事情,我没有办法直接在java中实现ssh登录。我似乎无法弄清楚为什么会失败。除了 ssh 之外,一切都运行良好。
最佳答案
通过Runtime.exec()
执行命令时,第一个元素是可执行文件,然后所有其他参数分别传入数组的其余部分。
但是您(可能)将整个linux命令作为可执行文件传递,这是行不通的。
试试这个:
String[] cmdarray = {"sshpass", "-p", "'password'", "ssh", "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3d484e584f7d656565136565651365656513656565" rel="noreferrer noopener nofollow">[email protected]</a>", "'./SleepDisplay && exit'"};
Runtime.getRuntime().exec(cmdarray);
关于java - 将 sshpass 与 bash 一起使用可以从命令行运行,而不是从 java exec 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9275484/