![](/img/trans.png)
[英]Call easy_install apps from java with ProcessBuilder/RunTime
[英]Call SCP from ProcessBuilder
我在我的应用程序中使用ProcessBuilder,我需要调用SCP(上传文件),但是我对如何输入密码感到困惑。 如何解决呢?
String[] commands=new String[]{"bash","-c","scp example.tar.gz username@192.168.0.131 /root/new "};
ProcessBuilder pb = new ProcessBuilder(commands);
pb.redirectErrorStream(true);
Process process = pb.start();
在何处添加SCP密码?
实现此目的的最佳方法是使用密钥对,而不是密码身份验证。 要生成密钥对,请以用户名登录到远程计算机。 在提示符下键入:
ssh-keygen -t rsa
这将生成〜/ .ssh / id_rsa私钥和〜/ .ssh / id_rsa.pub公钥。 将〜/ .ssh / id_rsa.pub复制到本地计算机,然后使用以下命令行:
mkdir ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys2 && chmod 600 ~/.ssh/authorized_keys2
cat id_rsa.pub >> ~/.ssh/authorized_keys2
(注意:如果〜/ .ssh已经存在,则mkdir可能会失败-在这种情况下,只需执行第二个命令即可。)
另一种选择是使用期望脚本。 创建一个包含以下内容的文件,并将其另存为/ some / path / scp_expect。 该文件应归将执行Java代码的用户所有。
#!/usr/bin/expect -f
spawn scp example.tar.gz username@192.168.0.131 /root/new
expect "assword:"
send -- "password\r"
expect eof
适当更改密码。 使文件可执行:
chmod 700 /some/path/scp_expect
现在改为从Java代码中调用Expect脚本:
String[] commands = new String[]{"bash", "-c", "/some/path/scp_expect"};
如果它不起作用, "assword:"
更改为在升级密码时显示的字符串。
此选项的缺点是您的密码在脚本中是明确的,因此请确保考虑这样做的安全性。 我宁愿自己使用密钥认证方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.