我在我的应用程序中使用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添加密码?
答案 0 :(得分:1)
答案 1 :(得分:1)
实现此目标的最佳方法是使用密钥对而不是密码身份验证。要生成密钥对,请以用户名登录远程计算机。在提示符下键入:
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可能会失败 - 在这种情况下只需继续使用第二个命令。)
答案 2 :(得分:1)
另一个选择是使用expect脚本。创建包含以下内容的文件,并将其另存为/ 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:"
更改为您提升密码时显示的字符串。
此选项的缺点是您的密码在脚本中是明确的,因此请务必考虑执行此操作时的安全隐患。我更喜欢自己使用密钥验证方法。