java - 将 sshpass 与 bash 一起使用可以从命令行运行,而不是从 java exec 运行

标签 java bash ssh exec runtime.exec

我有一个 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/

相关文章:

java - 我们可以在java中有一个整数数组的优先级队列吗

Java OutputStream 仅在关闭时刷新数据

linux - 有没有办法知道 Linux 中的初始化脚本存储在哪里?

linux - 进程未从 cron 下的脚本运行

linux - 通过 Docker 调用 OCRmyPDF 的 bash 脚本的错误响应

vscode 中的 ssh 错误 : Permission denied (publickey, 密码)

Java Collect加入自定义函数

java - 在 Activity 中添加 Mobfox 横幅广告代码

logging - 当某些后台进程仍在运行时,命令 'exit' 不起作用

javascript - 使用 ed25519 key 从 nodejs SSH 到服务器