Я пытаюсь установить соединение с сервером Unix и поместить / получить файлы с использованием SFTP.Я использую JCraft Jsch 0.1.53 и аутентификацию на основе токенов RSA.Нет пароля
Я сгенерировал закрытый ключ и открытые ключи с помощью программного обеспечения IPSwitch и настроил открытый ключ для пользователя на сервере Unix.
Я использую закрытый ключ, сгенерированный IPSwitch в моемJava-программа, которая в свою очередь использует JSch.
Файл Store.ini IPSwitch выглядит следующим образом:
[____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 отмена.
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)
Когда я использую только publickey вместо publickey, клавиатура-интерактив, пароль как PreferredAuthentications , я нажимаю,
com.jcraft.jsch.JSchException: Auth fail
at com.jcraft.jsch.Session.connect(Session.java:512)
at com.jcraft.jsch.Session.connect(Session.java:183)
Кроме того, если я игнорирую ниже2 строки, т. Е. Если я прокомментирую следующие 2 строки
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, и назвал его как id_rsa в моем затмении.Должен ли закрытый ключ, сгенерированный из IPSwitch, работать и для JSch?
Когда я подключаюсь через IPSwitch, все работает нормально.Не могли бы вы помочь мне здесь? Спасибо заранее.