我正在尝试使用基于公钥/私钥的身份验证通过SSH执行远程查询。以下命令正常工作,并在共享本地主机和远程服务器之间的公钥后,在bash shell上提供所需的输出作为字符串。
echo 123456 12@13:14 ABCD abc1234 | ssh -T user@abc.xyz.com
如何使用JSCH或SSHJ或任何其他类似的库
实现与JAVA相同的操作这是我到目前为止使用SSHJ尝试的但它对我不起作用(连接成功但没有结果)
public static void main(String... args)throws IOException {
final SSHClient ssh = new SSHClient();
ssh.loadKnownHosts();
ssh.connect("abc.xyz.com");
try {
ssh.authPublickey("user");
final Session session = ssh.startSession();
try {
final Command cmd = session.exec("123456 12@13:14 ABCD abc1234");
System.out.println(IOUtils.readFully(cmd.getInputStream()).toString());
cmd.join(5, TimeUnit.SECONDS);
System.out.println("\n** exit status: " + cmd.getExitStatus());
} finally {
session.close();
}
} finally {
ssh.disconnect();
ssh.close();
}
}
答案 0 :(得分:0)
下面的代码使用了JSCH Library,我正在努力: -
JSch jsch = new JSch();
String path = "PATH TO PRIVATE KEY";
jsch.addIdentity(path);
jsch.setConfig("StrictHostKeyChecking", "no");
Session session = jsch.getSession(userName, ipToConnect, portToConnect);
session.connect();
Channel channel = session.openChannel("exec");
((ChannelExec)channel).setCommand("COMMAND TO FIRE");
channel.setInputStream(null);
((ChannelExec)channel).setErrStream(System.err);
InputStream in = channel.getInputStream();
channel.connect();
//Read Response Here
channel.disconnect();
session.disconnect();
注意:您也可以使用基于密码的身份验证,而不是使用JSCH的密钥库