首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用JSch - Auth使用密钥连接Java ssh失败

使用JSch - Auth使用密钥连接Java ssh失败
EN

Stack Overflow用户
提问于 2015-07-29 22:42:20
回答 2查看 25.7K关注 0票数 1

我正在尝试使用ssh with key连接到localhost,但仍然收到"Auth Failed“错误。

下面是方法的实现:

代码语言:javascript
运行
复制
public void downloadUsingPublicKey(String username, String host)
    {

         String privateKey = "~/.ssh/id_rsa";

         JSch jsch = new JSch(); 
         Session session = null; 
         Channel channel = null; 
         ChannelSftp channelSftp = null; 
         try 
         { 

             jsch.addIdentity(privateKey); 
             System.out.println("Private Key Added."); 


             session = jsch.getSession(username, host); 
             System.out.println("session created."); 

             java.util.Properties config = new java.util.Properties(); 
             config.put("StrictHostKeyChecking", "no"); 

             session.setConfig(config); 
             session.connect(); 

             channel = session.openChannel("sftp"); 
             channel.connect(); System.out.println("shell channel connected...."); 

             channelSftp = (ChannelSftp)channel; 
             channelSftp.cd(Config.dir); 

             System.out.println("Changed the directory..."); 
         } catch (JSchException e) 
         { 
             // TODO Auto-generated catch block 
             e.printStackTrace(); 
         } catch (SftpException e) 
         { 
             // TODO Auto-generated catch block 
             e.printStackTrace(); 
         }finally
         { 
             if(channelSftp!=null)
             { 
                 channelSftp.disconnect(); 
                 channelSftp.exit(); 
             } 
             if(channel!=null) channel.disconnect(); 
             if(session!=null) session.disconnect(); 
         } 
    }

我已经使用linux终端创建了我的公钥/私钥对,如下所示:

代码语言:javascript
运行
复制
ssh-keygen -t rsa -b 4096 -C "myemail@email.com"

我没有放任何词组。下一步:

代码语言:javascript
运行
复制
ssh-add ~/.ssh/id_rsa

最后

代码语言:javascript
运行
复制
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

然后,当我运行我的程序时,我得到了错误:

代码语言:javascript
运行
复制
com.jcraft.jsch.JSchException: Auth fail
    at com.jcraft.jsch.Session.connect(Session.java:512)
    at com.jcraft.jsch.Session.connect(Session.java:183)
    at pl.eroj.filedownloader.Downloader.downloadUsingPublicKey(Downloader.java:73)
    at pl.eroj.filedownloader.Downloader.main(Downloader.java:107)

有什么想法吗?我的密钥是OpenSSH类型的,以行开头“-BEGIN RSA PRIVATE key -”

EN

回答 2

Stack Overflow用户

发布于 2021-08-25 08:35:33

这是我使用私钥的路径进行本地连接的方式

privateKeyPath ="C:\Keys\private_key.ppk“

代码语言:javascript
运行
复制
    public static OutputStream ConnectionUsingKey(String user, String hostName, String privateKeyPath)
        throws JSchException, IOException {
    JSch jsch = new JSch();
    Session session = null;
    try {

        jsch.addIdentity(privateKeyPath);
        session = jsch.getSession(user, hostName, 22);
        session.setConfig("PreferredAuthentications", "publickey");
        session.setConfig("StrictHostKeyChecking", "no");
        session.connect();
        if (session.isConnected() == true) {
            System.out.println("Connection to Session server is successfully");
        }
        channel = session.openChannel("shell");
        channel.setInputStream(System.in);
        channel.setOutputStream(System.out);
        channel.connect(30 * 1000);
        return channel.getOutputStream();

    } catch (JSchException e) {
        throw new RuntimeException("Failed to create Jsch Session object.", e);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2021-12-23 20:07:04

谢谢你@Vladi。在我的例子中,我需要连接到同时使用私钥和密码的服务器。因此,我必须像这样设置Config

代码语言:javascript
运行
复制
        session.setConfig("PreferredAuthentications", "publickey,password");
        session.setPassword("some_password");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31703743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档