我知道有很多关于这个问题的帖子但是我找不到:我按照这个例子:Want to invoke a linux shell command from Java运行命令。 ssh命令的问题在于身份验证。当我运行它时,我需要设置密码
$ ssh root@server 'fgrep Exception *.log*'
Enter passphrase for key '/././.ssh/id_rsa':
我怎样才能传递密码?
答案 0 :(得分:1)
有些库可用于调用ssh。 Java Secure Channel (JSCH)是一个非常受欢迎的库,由maven,ant和eclipse使用。它是开源的,具有BSD风格的许可证。
如果需要ssh身份验证,可以通过java使用。
如果仍然需要通过密码传递,有两种方法可以做你想要的。一个涉及存储的密码,一个没有。
两者都是非交互式的,这意味着当您不在那里输入密码时它们可以正常工作。
不需要密码的方式。您可以使用公共/私人 密钥验证而不是SSH密码。我要去 假设您使用的是OpenSSH,几乎每个都有 Linux发行版。
步骤:
配置SSH服务器以接受私钥登录。在/ etc / ssh / sshd_config中确保有一行显示PubkeyAuthentication yes(并且没有#infront)。如果更改此文件,则需要重新启动sshd服务。
在您的本地计算机(而不是服务器)上,使用 ssh-keygen -t rsa 创建一对密钥(您可以使用除rsa之外的其他选项,但我保留很简单)。不要指定密码。将密钥保存在提示的位置。
打开刚刚创建的id_rsa.pub文件的内容(这是一个非常长的文本行),并将内容复制到服务器计算机上$ HOME / .ssh / authorized_keys文件的末尾。如果文件不存在,请创建该文件。
基本思想是使用expect,这是一个 管理自动化工具,在ssh时输入密码 提示。它可能并不总是有效,当它没有时,它很难 弄清楚为什么不。我推荐第一种方法。
无论如何,这是一个你可以捅的命令,直到你做到了 想。
脚本代码是:
expect -c 'spawn ssh user@remote.host ; expect assword ; send "passphrase\n" ; interact'
可能未在您的系统上安装Expect。确保安装
答案 1 :(得分:0)
您需要从执行中获取InputStream(具有输出)并等待它询问您的密码,然后获取OutputStream(您将命令输入到其中)并向其发送您想要的密码