【问题标题】:struggling with sshj example ('exec') : Could not verify `ssh-rsa` host key with fingerprintsshj 示例('exec'):无法使用指纹验证 `ssh-rsa` 主机密钥
【发布时间】:2012-06-06 21:06:15
【问题描述】:

我正在尝试编写一个 java 程序,该程序将通过 ssh 连接并在工作中的服务器(redhat linux)上做一些事情。我的盒子是窗户。我阅读了有关 sshj 的信息,并且正在尝试使示例正常工作。我已经处理了大部分依赖项,现在我在处理公钥/私钥时遇到了错误,不幸的是我也不太了解(是的,这是新手的完美风暴!)。这是错误:

线程“主”net.schmizz.sshj.transport.TransportException 中的异常:[HOST_KEY_NOT_VERIFIABLE] 无法使用指纹 5f:d6:94:00:9e:ec:7e:34:6d:d0:d3:76:df:5e:dd:3d 验证端口 22 上 myserverssh-rsa 主机密钥

代码如下:

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();
        }
    }

}

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

【问题讨论】:

    标签: fingerprint sshj


    【解决方案1】:

    试试这个

    ssh.addHostKeyVerifier(new PromiscuousVerifier());
    

    这应该可以工作

    【讨论】:

    • 这不是解决方案。您基本上是在说要禁用主机密钥验证。
    【解决方案2】:

    试试这个

        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();
            }
        }
    }
    

    取消注释 addHostKeyVerifier 并注释 loadKnownHosts。它应该可以工作。

    【讨论】:

      【解决方案3】:

      这应该可行:

      ssh.addHostKeyVerifier("MD5:5f:d6:94:00:9e:ec:7e:34:6d:d0:d3:76:df:5e:dd:3d")
      

      addHostKeyVerifier 方法可以接收一个final String 作为参数,用于在FingerprintVerifier.java 类中执行验证。

      根据the repo,可以使用其他输入如:

      • "SHA1:2Fo8c/96zv32xc8GZWbOGYOlRak="
      • "SHA256:oQGbQTujGeNIgh0ONthcEpA/BHxtt3rcYY+NxXTxQjs="
      • "MD5:d3:5e:40:72:db:08:f1:6d:0c:d7:6d:35:0d:ba:7c:32"
      • "d3:5e:40:72:db:08:f1:6d:0c:d7:6d:35:0d:ba:7c:32"


      如果有多个密钥,请仔细检查 ssh 服务器的 默认公钥 的指纹。

      【讨论】:

        猜你喜欢
        • 2018-03-30
        • 2018-05-22
        • 2022-12-06
        • 1970-01-01
        • 2017-04-28
        • 1970-01-01
        • 2018-12-09
        • 2012-03-25
        相关资源
        最近更新 更多