与sshj示例('exec')挣扎:无法用指纹验证`ssh-rsa`主机密钥

hat*_*ick 5 fingerprint sshj

我正在尝试编写一个java程序,它将通过ssh连接并在工作的服务器上做一些事情(redhat linux).我的盒子是窗户.我读到了sshj,我正试图让这个例子起作用.我已经完成了大多数依赖项,现在我在处理公钥/私钥时出错了,不幸的是我也不太了解(是的,这是一个完美的新手风暴!).这是错误:

例外在线程"主" net.schmizz.sshj.transport.TransportException:[HOST_KEY_NOT_VERIFIABLE]无法验证ssh-rsa与指纹主机密钥5f:d6:94:00:9e:ec:7e:34:6d:d0:d3:76:df:5e:dd:3d用于myserver在端口22

这是代码:

import net.schmizz.sshj.SSHClient;
import net.schmizz.sshj.common.IOUtils;
import net.schmizz.sshj.connection.channel.direct.Session;
import net.schmizz.sshj.connection.channel.direct.Session.Command;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

/** This examples demonstrates how a remote command can be executed. */
public class sshBuddy {

    public static void main(String... args)
            throws IOException {
        final SSHClient ssh = new SSHClient();
        ssh.loadKnownHosts();
        //ssh.addHostKeyVerifier("5f:d6:94:00:9e:ec:7e:34:6d:d0:d3:76:df:5e:dd:3d");

        ssh.connect("myserver");
        try {
            ssh.authPublickey(System.getProperty("myusername"));
            final Session session = ssh.startSession();
            try {
                final Command cmd = session.exec("ping -c 1 google.com");
                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)

任何帮助将不胜感激,谢谢!

小智 8

试试吧

ssh.addHostKeyVerifier(new PromiscuousVerifier());
Run Code Online (Sandbox Code Playgroud)

这应该工作

  • 这不是解决方案.您基本上是要禁用主机密钥验证. (3认同)

rgk*_*gan 1

尝试这个

    public class sshBuddy {

    public static void main(String... args)
            throws IOException {
        final SSHClient ssh = new SSHClient();
        //ssh.loadKnownHosts();
        ssh.addHostKeyVerifier("5f:d6:94:00:9e:ec:7e:34:6d:d0:d3:76:df:5e:dd:3d");

        ssh.connect("myserver");
        try {
            ssh.authPublickey(System.getProperty("myusername"));
            final Session session = ssh.startSession();
            try {
                final Command cmd = session.exec("ping -c 1 google.com");
                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)

取消注释 addHostKeyVerifier 并注释 loadKnownHosts。它应该有效。