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

无法使用IPSwitch客户端的Jsch和私钥建立到unix服务器的连接

艾骏喆
2023-03-14

我正在尝试建立到Unix服务器的连接,并使用SFTP放置/获取文件。我正在使用JCraft的Jsch 0.1.53和基于RSA令牌的身份验证。没有密码。

我使用IPSwitch软件生成了私钥和公钥,并在Unix服务器中为用户配置了公钥。

Ipswitch的store.ini文件类似于

[____Item____0]
____ItemName____=auto
PublicKey=C:\ClientKeyStore\Pub203E.tmp
Pass=_y**************************NyYbpT
PrivateKey=C:\ClientKeyStore\Pri203F.tmp
[__CONFIG__]
Count=1

私钥看起来像,

-----BEGIN ENCRYPTED PRIVATE KEY-----

MIIFHzBJB*******************************

B**************************************B

************1on4MNDZfTgQ==

-----END ENCRYPTED PRIVATE KEY-----

stackoverflow和其他地方有很多例子。我试过了,但点击的是com.jcraft.jsch.jschException:Auth cancel。

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.UserInfo;


public class UnixUtilities {

public void unixConnectionUsingKey(String username, String hostIPAddress, int portNumber) throws JSchException {

    JSch jsch = new JSch();

    jsch.addIdentity("src/main/resources/keys/id_rsa");

    Session session = jsch.getSession(username, hostIPAddress, portNumber);

    session.setConfig("StrictHostKeyChecking", "no");
    session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");

    UserInfo userinfo = new MyUserInfo();
    session.setUserInfo(userinfo);

    session.connect();

    Channel channel = session.openChannel("sftp");
}

}

class MyUserInfo implements UserInfo {
String password = null;

@Override
public String getPassphrase() {
    return null;
}

@Override
public String getPassword() {
    return password;
}

public void setPassword(String passwd) {
    password = passwd;
}

@Override
public boolean promptPassphrase(String message) {
    return true;
}

@Override
public boolean promptPassword(String message) {
    return true;
}

@Override
public boolean promptYesNo(String message) {
    return true;
}

@Override
public void showMessage(String message) {
    // TODO Auto-generated method stub

}
}
com.jcraft.jsch.JSchException: Auth cancel
at com.jcraft.jsch.Session.connect(Session.java:511)
at com.jcraft.jsch.Session.connect(Session.java:183)
  com.jcraft.jsch.JSchException: Auth fail
    at com.jcraft.jsch.Session.connect(Session.java:512)
    at com.jcraft.jsch.Session.connect(Session.java:183)
UserInfo userinfo = new MyUserInfo();

session.setUserInfo(userinfo);

我在击球,

com.jcraft.jsch.JSchException: USERAUTH fail
at com.jcraft.jsch.UserAuthPublicKey.start(UserAuthPublicKey.java:119)
at com.jcraft.jsch.Session.connect(Session.java:463)
at com.jcraft.jsch.Session.connect(Session.java:183)

Jsch日志如下所示,

    Connecting to ***.***.**.*** port ****

    Connection established

    Remote version string: SSH-2.0-6.4.0.370 SSH Tectia Server

    Local version string: SSH-2.0-JSCH-0.1.53

    CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256

    aes256-ctr is not available.

    aes192-ctr is not available.

    aes256-cbc is not available.

    aes192-cbc is not available.

    CheckKexes: diffie-hellman-group14-sha1,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521

    CheckSignatures: ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521

    SSH_MSG_KEXINIT sent

    SSH_MSG_KEXINIT received

    kex: server: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group14-sha256@ssh.com,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256

    kex: server: ssh-rsa,ssh-rsa-sha256@ssh.com

    kex: server: aes128-cbc

    kex: server: aes128-cbc

    kex: server: hmac-sha1,hmac-sha1-96,hmac-sha256-2@ssh.com,hmac-sha224@ssh.com,hmac-sha256@ssh.com,hmac-sha384@ssh.com,hmac-sha512@ssh.com

    kex: server: hmac-sha1,hmac-sha1-96,hmac-sha256-2@ssh.com,hmac-sha224@ssh.com,hmac-sha256@ssh.com,hmac-sha384@ssh.com,hmac-sha512@ssh.com

    kex: server: none,zlib

    kex: server: none,zlib

    kex: server: 

    kex: server: 

    kex: client: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1

    kex: client: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521

    kex: client: aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc

    kex: client: aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc

    kex: client: hmac-md5,hmac-sha1,hmac-sha2-256,hmac-sha1-96,hmac-md5-96

    kex: client: hmac-md5,hmac-sha1,hmac-sha2-256,hmac-sha1-96,hmac-md5-96

    kex: client: none

    kex: client: none

    kex: client: 

    kex: client: 

    kex: server->client aes128-cbc hmac-sha1 none

    kex: client->server aes128-cbc hmac-sha1 none

    SSH_MSG_KEXDH_INIT sent

    expecting SSH_MSG_KEXDH_REPLY

    ssh_rsa_verify: signature true

    Permanently added '***.***.**.***' (RSA) to the list of known hosts.

    SSH_MSG_NEWKEYS sent

    SSH_MSG_NEWKEYS received

    SSH_MSG_SERVICE_REQUEST sent

    SSH_MSG_SERVICE_ACCEPT received

    Authentications that can continue: publickey

    Next authentication method: publickey

    Disconnecting from ***.***.**.*** port ****

我使用的密钥与IPSwitch生成的密钥相同,并在Eclipse中将其命名为id_rsa。IPSwitch生成的私钥是否也适用于JSch?

当我通过IPSwitch连接时,它工作得很好。你能帮我一下吗?先谢谢你。

共有1个答案

甘骞尧
2023-03-14

要为加密私钥提供密码,您需要实现userinfo.promptpassphraseuserinfo.getpassphrase,而不是userinfo.getpassworduserinfo.promptpassword

@Override
public boolean promptPassphrase(String message) {
    return true;
}

@Override
public String getPassphrase() {
    return password;
}

(为了保持一致性,您应该将password字段重命名为passphrase)。

 类似资料:
  • 我无法连接到我的节点。js服务器。当通过节点使用http web服务器在本地运行它时,它工作得很好,但是当连接到外部时,它会加载<code>socket.io。js文件很好,但当尝试使用套接字时,它会从URL中删除端口,无法连接。 而不是在网络请求中执行此操作: http://external-domain.com:3000/socket.io/?EIO=3 它是这样做的: http://exte

  • 我需要用RSA-2048服务器公钥加密客户端私钥。我知道私钥明显比公钥长,我不确定是否可能。。。但我看到类似的任务是用Python完成的,所以我想知道您的看法。 crypto/rsa致命错误:对于rsa公钥大小,消息太长

  • 无法连接到本链接中提到的greeter grpc服务-https://docs . Microsoft . com/en-us/aspnet/core/tutorials/grpc/grpc-start?欢迎客户端的view=aspnetcore-3.0,它是使用grpc.core库(< code>Grpc)从. net framework应用程序编写的。核心2.24.0和< code>Grpc。

  • 我在Windows10机器上尝试将RabbitMQ(3.6.11版本与Erlang 20一起安装)连接到ZipKin,但我得到了以下错误: 原因:org.springframework.beans.factory.unsatisfieddependencyException:创建名为“server configurator”的bean时出错,该bean在zipkin2.server.interna

  • 我试图使用Python Twisted Authobhan websocket客户端打开客户端(每台机器有60K端口限制)的并发websocket连接。但是我无法使用下面的代码打开不超过20K的连接: 我在一个循环中使用了“reactor.connecttcp”,使用Twisted打开并发websocket连接是否正确? 让我知道。

  • websocket客户端(使用Autobahn/Python和Twisted)需要连接到websocket服务器:客户端需要向服务器提供其客户端证书,客户端需要检查服务器的证书。例如,这些证书是在Kubernetes minikube安装过程中创建的。特别地: 服务器证书(据我所知为X509格式) 客户端证书~/。minikube/客户。按键 我已经检查过,我可以成功地使用这些证书密钥使用发出库伯