繁体   English   中英

从ProcessBuilder呼叫SCP

[英]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密码?

JSch库更适合于此。 看看他们的示例文件筛选。

实现此目的的最佳方法是使用密钥对,而不是密码身份验证。 要生成密钥对,请以用户名登录到远程计算机。 在提示符下键入:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM