如何从java代码执行ssh bash命令?

时间:2012-06-28 10:14:20

标签: java ssh execute

我知道有很多关于这个问题的帖子但是我找不到:我按照这个例子:Want to invoke a linux shell command from Java运行命令。 ssh命令的问题在于身份验证。当我运行它时,我需要设置密码

$ ssh root@server 'fgrep Exception *.log*' 
Enter passphrase for key '/././.ssh/id_rsa':

我怎样才能传递密码?

2 个答案:

答案 0 :(得分:1)

有些库可用于调用ssh。 Java Secure Channel (JSCH)是一个非常受欢迎的库,由maven,ant和eclipse使用。它是开源的,具有BSD风格的许可证。

如果需要ssh身份验证,可以通过java使用。

如果仍然需要通过密码传递,有两种方法可以做你想要的。一个涉及存储的密码,一个没有。

两者都是非交互式的,这意味着当您不在那里输入密码时它们可以正常工作。

  1. 不需要密码的方式。您可以使用公共/私人     密钥验证而不是SSH密码。我要去     假设您使用的是OpenSSH,几乎每个都有     Linux发行版。

    步骤:

    • 配置SSH服务器以接受私钥登录。在/ etc / ssh / sshd_config中确保有一行显示PubkeyAuthentication yes(并且没有#infront)。如果更改此文件,则需要重新启动sshd服务。

    • 在您的本地计算机(而不是服务器)上,使用 ssh-keygen -t rsa 创建一对密钥(您可以使用除rsa之外的其他选项,但我保留很简单)。不要指定密码。将密钥保存在提示的位置。

    • 打开刚刚创建的id_rsa.pub文件的内容(这是一个非常长的文本行),并将内容复制到服务器计算机上$ HOME / .ssh / authorized_keys文件的末尾。如果文件不存在,请创建该文件。

    Further Detail refer here

  2. 基本思想是使用expect,这是一个 管理自动化工具,在ssh时输入密码 提示。它可能并不总是有效,当它没有时,它很难 弄清楚为什么不。我推荐第一种方法。

    无论如何,这是一个你可以捅的命令,直到你做到了 想。

  3. 脚本代码是:

        expect -c 'spawn ssh user@remote.host ; expect assword ; send  "passphrase\n" ; interact'
    

    可能未在您的系统上安装Expect。确保安装

答案 1 :(得分:0)

您需要从执行中获取InputStream(具有输出)并等待它询问您的密码,然后获取OutputStream(您将命令输入到其中)并向其发送您想要的密码

阅读this article