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

rgk*_*gan 2 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();
        }
Run Code Online (Sandbox Code Playgroud)

它抛出以下错误.

net.schmizz.sshj.transport.TransportException:[HOST_KEY_NOT_VERIFIABLE]无法验证ssh-rsa与指纹主机密钥********用于192.168.0.1在端口22

小智 10

您可以通过实现HostKeyVerifier来解决您的问题

class NullHostKeyVerifier implements HostKeyVerifier {
    @Override
    public boolean verify(String arg0, int arg1, PublicKey arg2) {
        return true;
    }        
}
Run Code Online (Sandbox Code Playgroud)

并将此伪实现添加到您的SSHClient实例配置:

...
    final SSHClient ssh = new SSHClient();
    ssh.addHostKeyVerifier(new NullHostKeyVerifier());
...
Run Code Online (Sandbox Code Playgroud)

  • 或者,只需使用sshj提供的验证程序,它使用:ssh.addHostKeyVerifier(new PromiscuousVerifier()); (6认同)