如何使用sshj java api连接到具有用户名和密码的远程计算机?
我试过这段代码。这段代码有什么问题?
final SSHClient ssh = new SSHClient();
ssh.connect("192.168.0.1");
ssh.authPassword("abcde", "fgh".toCharArray());
try {
final Session session = ssh.startSession();
try {
final Command cmd = session
.exec("cd /home/abcde/Desktop/");
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();
}
抛出以下错误。
net.schmizz.sshj.transport.TransportException: [HOST_KEY_NOT_VERIFIABLE]无法验证
ssh-rsa
主机密钥 端口22上********
的指纹192.168.0.1
答案 0 :(得分:10)
您可以通过实施HostKeyVerifier来解决问题
class NullHostKeyVerifier implements HostKeyVerifier {
@Override
public boolean verify(String arg0, int arg1, PublicKey arg2) {
return true;
}
}
并将此假实现添加到您的SSHClient实例配置中:
...
final SSHClient ssh = new SSHClient();
ssh.addHostKeyVerifier(new NullHostKeyVerifier());
...
答案 1 :(得分:1)
在实例化SSHClient后插入ssh.loadKnownHosts();
或ssh.loadKnownHosts("somepath");
。
然后将您尝试连接的计算机(远程)(192.168.0.1)添加到默认位置或某些路径"的known_hosts文件(在您的计算机上)。对于Linux机器,默认路径为/home/myuser/.ssh/known_hosts
,或者在Windows框c:/user/myuser/.ssh/known_hosts
中。
known_host采用openSSH格式(ip / orhostname算法密钥注释)。
将计算机添加到known_hosts:
- 如果你正在使用Linux(在你的机器上),只需ssh到远程机器,它将自动添加到known_hosts。
- 如果您使用的是Windows,请使用bitwise tunnelier连接到将存储密钥的远程计算机。转到按位键管理器(它将在您的开始菜单上,按位文件夹)并将远程机器ip的行导出为openSSH格式。将生成的行复制到known_host文件。
这样你就可以真正验证主机密钥了。它在mule esb中也很有用,你不能将nullhost验证器添加到ssh连接器(我的情况)。
答案 2 :(得分:0)
你错过了ssh键,只需添加
ssh.addHostKeyVerifier("10:20......");
其中 10:20 ... 来自您的例外情况:“指纹 ******** ”