我正在尝试通过使用私钥建立的ssh连接执行一组命令。为此我在java中使用了JSCh和Session类。
以下是代码:
java.util.Properties config = new java.util.Properties();
String privateKeyPath = conn.getsshArg().getKeyPath();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
jsch.addIdentity(privateKeyPath); //
Session session = jsch.getSession(conn.getsshArg().getUsername(), conn.getVmIpaddress(), 22);
session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password"); //
System.out.println("User:" + conn.getsshArg().getUsername() + "Password" + conn.getsshArg().getPassword()
+ "IP:" + conn.getVmIpaddress() + " Port:" + 22);
session.setPassword(conn.getsshArg().getPassword());
System.out.println("Command to be fired:" + conn.getsshArg().getCommand());
session.setConfig(config);
//session.setTimeout(150);
session.connect();
if (session.isConnected()) {
// LogManager.getLogger().info("VNFLCM: Ssh on the VNF
// successfull");
System.out.println("SSH successful");
} else {
System.out.println("SSH Connection Failure ");
return ret;
}
Channel channel = session.openChannel("exec");
String command = conn.getsshArg().getCommand().replace("&curlStart;", "{");
command = command.replaceAll("&curlEnd;", "}");
command = command.replaceAll("&jsonQuot;", "\"");
((ChannelExec) channel).setCommand(command);
//channel.setInputStream(null);
((ChannelExec) channel).setErrStream(System.err);
InputStream in = channel.getInputStream();
channel.connect();
byte[] tmp = new byte[1024];
String line = "";
while(true){
while(in.available()>0){
int i=in.read(tmp, 0, 1024);
if(i<0)break;
//LogManager.getLogger().debug(new String(tmp, 0, i));
line=new String(tmp, 0, i);
System.out.print(line);
}
if(channel.isClosed()){
//LogManager.getLogger().debug("exit-status: "+channel.getExitStatus());
System.out.println("exit-status: "+channel.getExitStatus());
break;
}
ret = true;
try{Thread.sleep(5000);}catch(Exception ee){}
}
channel.disconnect();
session.disconnect();
}
catch (Exception e) {
e.printStackTrace();
}
我尝试使用root用户登录我的节点,但是使用fedora而不是root提示ssh。
我尝试了链接中提供的解决方案:Java JSch changing user on remote machine and execute command,但是使用了su -c&#34;命令&#34;提示输入密码。在这里,我的实例没有任何密码。
所有命令都只需要使用root用户执行。
请注意:在这里,我正在尝试使用私钥ssh。
如果有人能帮助我,我将不胜感激。