如何使用sshj java api连接用户名和密码的远程机器?

时间:2012-07-12 22:30:01

标签: java ssh sshj

如何使用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

3 个答案:

答案 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 ... 来自您的例外情况:“指纹 ********