当前位置: 首页 > 知识库问答 >
问题:

如何使用公钥从服务器中托管的应用程序连接到使用JSch的SFTP服务器

仉嘉泽
2023-03-14

我们必须通过配置用户名、密码和公钥,使用代理服务器internet.ford.com从应用程序连接到外部SFTP服务器。

4463 [8/19/19 12:05:06:301 EDT] 0001fadf TransCommunic I   JSchException @  TransCommunicationMgr:- connect Result Code: UnknownHostKey: 74.126.93.138. RSA key fingerprint is e8:90:a9:f3:3d:8f:83:26:e3:24:2b:2f:a1:71:e3:7c
// knownHostPublicKey is a String variable 
knownHostPublicKey=config.getKnownHostPublicKey();

jsch.setKnownHosts(new 
ByteArrayInputStream(knownHostPublicKey.getBytes()));
public Session connectSFTP(final FtpCredentials config)
throws OfBusinessRuntimeException{
final String METHOD_NAME = "connect";
log.entering(CLASS_NAME, METHOD_NAME, config);

    /*Local attributes declaration */
    String host = null;
    String user = null;
    String password = null;
    int elapsedTime = 0;
    int sftpPort = 0;
    String knownHostPublicKey = null;
    String sftpProxy = null;
    int sftpProxyPort=0;
    Session sftpSession = null;
    JSch jsch = new JSch();
    /* Beginning of try catch block */
    try {

        // Getting FTP connection details.
        if (config != null) {
            host = config.getHost();
            user = config.getUserId();
            sftpPort = config.getSftpPort();
            password = config.getPassword();
            elapsedTime = config.getElapsedTime();
            knownHostPublicKey=config.getKnownHostPublicKey();
            /*byte[] hostPublicKey=Base64.getDecoder().decode(knownHostPublicKey);
            HostKey hostKey=new HostKey(host,hostPublicKey);
            jsch.getHostKeyRepository().add(hostKey,null);
            */                

            jsch.

            jsch.setKnownHosts(new ByteArrayInputStream(knownHostPublicKey.getBytes()));

            sftpProxy=config.getSftpProxy();
            sftpProxyPort=config.getSftpProxyPort();
            sftpSession = jsch.getSession(user, host, sftpPort);
        }
        log.info("Before Connect " + host + " User :- " + user);
        if (host == null || user == null || password == null) {
            throw new OfBusinessRuntimeException(
                    "SFTP Host Information not found.");
        }
        sftpSession.setHost(host);
        sftpSession.setPassword(password);
        sftpSession.setPort(sftpPort);

        //java.util.Properties config = new java.util.Properties();
        // // force aes256-ctr encryption
        //config.put("cipher.s2c", "aes256-ctr");
        //config.put("cipher.c2s", "aes256-ctr");
        //config.put("CheckCiphers", "aes256-ctr");
        //session.setConfig(config);

        sftpSession.setProxy(new ProxyHTTP(sftpProxy,sftpProxyPort));
        /*
         * Setting the timeout to 30 seconds to ensure connection is made
         * for testing setting the port to 22 as this should be the one
         * to accept the connection
         **/

        sftpSession.setTimeout(elapsedTime);
        sftpSession.connect();
        log.info("SFTP Session Connection is successful");

    } catch (final JSchException jschException) {
        jschException.printStackTrace();
        log.info("JSchException @  TransCommunicationMgr:- "
                 + METHOD_NAME + " Result Code: "
                 + jschException.getMessage());
        //throw new OfBusinessRuntimeException(jschException.getMessage(),jschException);
    }
    /* Log existing method. */
    log.exiting(CLASS_NAME, METHOD_NAME, sftpSession);
    return sftpSession;
}

预期与外部SFTP服务器的连接成功。

共有1个答案

汤才捷
2023-03-14

jsch.setknownhosts接受OpenSSHauthorized_keys文件格式的公钥,如下所示:

example.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0hVqZOvZ7yWgie9OHdTORJVI5fJJoH1yEGamAd5G3werH0z7e9ybtq1mGUeRkJtea7bzru0ISR0EZ9HIONoGYrDmI7S+BiwpDBUKjva4mAsvzzvsy6Ogy/apkxm6Kbcml8u4wjxaOw3NKzKqeBvR3pc+nQVA+SJUZq8D2XBRd4EDUFXeLzwqwen9G7gSLGB1hJkSuRtGRfOHbLUuCKNR8RV82i3JvlSnAwb3MwN0m3WGdlJA8J+5YAg4e6JgSKrsCObZK7W1R6iuyuH1zA+dtAHyDyYVHB4FnYZPL0hgz2PSb9c+iDEiFcT/lT4/dQ+kRW6DYn66lS8peS8zCJ9CSQ==

那不是你使用的格式。

 类似资料:
  • 我的mongoDB托管在X盒上,Angular Spring应用程序托管在Y盒上。当两者都在本地时,我的应用程序运行良好,但在这个服务器级配置中,我遇到了以下问题。 HTTP状态500-请求处理失败;嵌套异常是org.springframework.dao.DataAccessResourceFailure异常:无法连接到任何服务器;嵌套异常是com.mongodb.MongoServerSsel

  • 问题内容: 我正在使用jsch从服务器下载文件,下面是我的代码。 com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2629) at com.jcraft.jsch.ChannelSftp._get(ChannelSftp.java:977) at com.jcraft.jsch.ChannelSftp.get(Channe

  • 我遇到了一种奇怪的情况,第一次需要连接到SFTP服务器,但似乎找不到访问该服务器已知主机条目的方法。如果我说: 但显然这让你容易受到中间人的攻击。因此,我尝试连接: 我会收到各种各样的错误信息。最近的一次是: 我运气不好吗?我是不是应该绕过钥匙检查?

  • 问题内容: 我无法让我的Android应用程序连接到socket.io聊天服务器。我正在使用由Gottox创建的socket.io-java- client,可以在这里找到:https : //github.com/Gottox/socket.io-java- client 服务器在端口7000上本地运行。我使用的是Android模拟器,因此我使用的是10.0.2.2:7000来访问服务器。 任何

  • 问题内容: 我处于一种奇怪的情况下,我需要第一次连接到SFTP服务器,但似乎找不到找到访问该服务器的已知主机条目的方法。如果我可以连接很好说: 但显然,这会让您在中间攻击时对男人敞开怀抱。所以我尝试连接: 而且我得到各种错误消息。最近的是: paramiko.hostkeys.InvalidHostKey 问题是我没有主机密钥,因为我是第一次连接。我试图从其他连接中获取密钥。我使用WinSCP,但