使用Java进行SSH私钥验证

时间:2018-02-01 16:19:53

标签: java ssh jsch

我的用户需要针对他的Git存储库验证他的私钥。它类似于任何DB Client工具中的“测试连接”按钮。

我正在使用JSCH在Java中进行此验证(我只需要使用SSH连接并告诉连接成功)。下面是我的Java代码

public class SSHConnect {


    private String file = "c:\\me\\ssh-keys\\config_31_jan";

    public static void main(String... args) {
         new SSHConnect().invoke();
    }

    public void invoke () {
        JSch jSch = new JSch();
        try {
            jSch.addIdentity(file);
            Session session = jSch.getSession("MY_USER_NAME","github.my_company.com",22) ;

            session.connect();
        } catch (JSchException e) {
            e.printStackTrace();
        }
    }
}

我这样做时会得到以下异常

com.jcraft.jsch.JSchException: UnknownHostKey: github.***.com. RSA key fingerprint is 6e:23:f4:4a:49:fd:18:77:ce:35:3e:ae:7c:a9:f6:ed
    at com.jcraft.jsch.Session.checkHost(Session.java:805)
    at com.jcraft.jsch.Session.connect(Session.java:345)
    at com.jcraft.jsch.Session.connect(Session.java:183)
    at com.pcfdev.main.SSHConnect.invoke(SSHConnect.java:23)
    at com.pcfdev.main.SSHConnect.main(SSHConnect.java:13)

我不想做任何事吗?请帮忙

1 个答案:

答案 0 :(得分:1)

您没有通过addIdentity方法加载密钥。您有效地将私钥设置为"c:\\me\\ssh-keys\\config_31_jan"

您需要先加载文件内容。例如:

private String filePath = "c:\\me\\ssh-keys\\config_31_jan";

public void invoke () {
    File f = new File (filePath );
    String key = new String(Files.readAllBytes(f.toPath())); 

    JSch jSch = new JSch();
    try {
        jSch.addIdentity(key);
        Session session = jSch.getSession("MY_USER_NAME","github.my_company.com",22) ;

        session.connect();
    } catch (JSchException e) {
        e.printStackTrace();
    }
}