使用Java在ssh上运行命令

Running commands over ssh with Java

ScEnvii:我想通过SSH在Java程序上运行远程机器上的命令(我在我的开发机器上使用OpenSSH)。我还希望通过传递密码来建立ssh连接,而不是像使用"expect"那样设置密钥。问题:当尝试执行"expect"类密码登录时,使用ProcessBuilder创建的进程似乎看不到密码提示。当运行常规的非ssh命令(例如"ls")时,我可以获取流并与它们进行良好的交互。我将标准错误和标准输出与redirectErrorStream(true);结合到一个流中,所以我不会在标准错误中丢失它……当我使用'-v'选项运行ssh时,我看到流中的所有日志记录,但看不到提示。这是我第一次尝试将ProcessBuilder用于类似的用途。我知道使用Python、Perl或好的OL会更容易,但是我的老板想利用我们试图在现有Java程序中返回的东西(远程日志文件和运行脚本),所以我有点被卡住了。

提前感谢您的帮助!


这提示可能是只读的显示一个tty ssh连通时,它不是在Java案例。

有可能是一个供应的密码的方式在你的ssh命令行应用程序。这将是的方式,把过去的提示。

alternately,考虑直接从主机服务器连接到本地的Java代码,而不是运行的外部应用程序。有一个百万库这样做。


使用外部程序,而不需要使用SSH,为什么Java SSH库:

  • trilead
  • JTA

我找到了两个谷歌是那会避免问题非常硬,OpenSSH将工作上的密码输入,以防止进入它会直接打开终端。安切洛蒂很难期望工作在模拟一阶和TTY。


例子:在塞湖学院执行过sshj SSH使用a命令


为什么需要使用Java SSH客户端?这是一个BSD许可,和列在这里有更多的客户。


一个最安全的程序不要使用标准输入/输出对捕获的密码,他们捕捉的tty或一些等效方法。


引用他人的建议使用a Java SSH文库。我想我对科恩的响应。在命令行发送密码,当建立连接是不允许的,所以insecure和sshd服务器(基于配置)。

你可能想看看这一启动键设置,那么你可以将SSH命令在机器没有密码。

基本步骤使用OpenSSH创建KeyPair(i做RSA,但我知道有一个更好的方法。创建文件夹在你的home目录a。在源机器创建文件夹在你的home目录a。在目标机器保持您的私人密钥-在你的机器的源文件夹。拷贝你的文件被复制到一个公共密钥_键在目标文件夹的。

一些说明可以在这里找到


采取一看我们最近发布的主机,这是基于Apache的MINA的项目。


我已经使用trilead SSH客户端有很多成功。所以我想jsch(另一个Java SSH隧道客户端和客户端在本地的SSH的Linux。什么是最好的trilead远。


你可以使用运行命令edtftpj /表演,工作人员通过SFTP文件传输。它的Java。