Я поддерживаю устаревшее веб-приложение, и одна из функций - использовать JSCH для подключения SFTP к другому серверу. Наша команда по обслуживанию серверов недавно добавила новый ключ RSA к целевому серверу поверх ключа DSA, который был там, и теперь мы получаем сообщение об ошибке com.jcraft.jsch.JSchException: Auth fail. Вот код:
public final static void sftpFileToRemoteDirectory(
String clientConnect,
int clientPort,
String clientLogin,
String encryptedPassword,
String path,
String remoteFile,
byte[] file)
throws Exception
{
JSch jsch = new JSch();
Session session = null;
ByteArrayInputStream baInputStream = null;
try {
//using port 24
session = jsch.getSession(clientLogin, clientConnect, clientPort);
session.setConfig("StrictHostKeyChecking", "no");
// Decrypt password string and set password
String saPwd = new EncryptionHelper().decryptString(encryptedPassword);
session.setPassword(saPwd);
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
sftpChannel = (ChannelSftp)channel;
System.out.println("Changing to FTP remote dir: " +
path);
sftpChannel.cd(path);
//get ByteArrayInputStream for file
byte b[] = file;
baInputStream = new ByteArrayInputStream(b);
//Put file on server
System.out.println("Moving " + remoteFile + " to " + path);
sftpChannel.put(baInputStream, remoteFile);
sftpChannel.exit();
} finally {
try {
baInputStream.close();
if (session != null) {
session.disconnect();
}
} catch (Exception e) {
// Don't throw exception caused by closing stream
e.printStackTrace();
}
}
}
Я нашел этот пост, который казался связанным. Мы дважды проверили и убедились, что целевой сервер находится в списке известных хостов. Это включает только имя сервера, полное доменное имя и полное доменное имя плюс номер порта, но безуспешно. Какие изменения я могу внести в код?
Сообщение об ошибке:
20:40: 37,639 ОШИБКА [stderr] (ajp - 127.0.0.1-8009-20) Причина: com.jcraft.jsch.JSchException: Ошибка аутентификации
20:40: 37,639 ОШИБКА [stderr] (ajp - 127.0.0.1-8009-20) в com.jcraft.jsch.Session.connect (Session.java:461)
20:40: 37,639 ОШИБКА [stderr] (ajp - 127.0.0.1-8009-20) в com.jcraft.jsch.Session.connect (Session.java:154)
20:40: 37,639 ОШИБКА [stderr] (ajp - 127.0.0.1-8009-20) в com.lmig.requestit.utils.RequestITFileManagementUtils.sftpFileToRemoteDirectory (RequestITFileManagementUtils.java:54)
20:40: 37,639 ОШИБКА [stderr] (ajp - 127.0.0.1-8009-20) в com.lmig.requestit.modules.desktop.automation.Form2039Automation.automateOutlookPhotoMoveFileToPhoto (Form2039Automation.java:109)
20: 40: 37,640 ERROR [stderr] (ajp - 127.0.0.1-8009-20) ... еще 27
Вот логи из АКХ:
13: 41: 10,184 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: подключение к порту 24 сервера
13: 41: 10,188 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: соединение установлено
13: 41: 10,190 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: Строка удаленной версии: SSH-2.0-1.07 FlowSsh: WinSSHD 5.20
13: 41: 10,190 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: строка локальной версии: SSH-2.0-JSCH-0.1.44
13: 41: 10,190 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: CheckCiphers: aes256-ctr, aes192-ctr, aes128-ctr, aes256-cbc, aes192-cbc, aes128-cbc, 3des -ctr, arcfour, arcfour128, arcfour256
13: 41: 10,231 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: aes256-ctr недоступен.
13: 41: 10,231 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: aes192-ctr недоступен.
13: 41: 10,232 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: aes256-cbc недоступен.
13: 41: 10,232 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: aes192-cbc недоступен.
13: 41: 10,232 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: arcfour256 недоступен.
13: 41: 10,232 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: отправлено SSH_MSG_KEXINIT
13: 41: 10,233 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: получен SSH_MSG_KEXINIT
13: 41: 10,235 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: kex: server- ›client aes128-ctr hmac-md5 none
13: 41: 10,235 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: kex: client- ›server aes128-ctr hmac-md5 none
13: 41: 10,261 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: отправлено SSH_MSG_KEXDH_INIT
13: 41: 10,262 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: ожидается SSH_MSG_KEXDH_REPLY
13: 41: 10,285 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: ssh_rsa_verify: подпись истинна
13: 41: 10,299 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ПРЕДУПРЕЖДЕНИЕ: «Сервер» (RSA) постоянно добавлен в список известных хостов.
13: 41: 10,299 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: отправлено SSH_MSG_NEWKEYS
13: 41: 10,299 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: получено SSH_MSG_NEWKEYS
13: 41: 10,312 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: отправлено SSH_MSG_SERVICE_REQUEST
13: 41: 10,312 INFO [stdout] (ajp - 127.0.0.1-8009-7) INFO: получено SSH_MSG_SERVICE_ACCEPT
13: 41: 10,314 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: аутентификация, которая может продолжаться: gssapi-with-mic, publickey, keyboard-interactive, password
13: 41: 10,314 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: следующий метод аутентификации: gssapi-with-mic
13: 41: 10,330 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: аутентификация, которая может продолжаться: открытый ключ, интерактивная клавиатура, пароль
13: 41: 10,330 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: следующий метод аутентификации: открытый ключ
13: 41: 10,333 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: аутентификация, которая может продолжаться: пароль
13: 41: 10,333 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: Следующий метод аутентификации: пароль
13: 41: 13,345 ИНФОРМАЦИЯ [stdout] (ajp - 127.0.0.1-8009-7) ИНФОРМАЦИЯ: отключение от порта сервера 24
StrictHostKeyChecking=no
(что является недостатком безопасности, кстати), поэтому никакое изменение ключа хоста сервера не может вызвать у вас никаких проблем. Даже если бы это было так, вы никогда не дойдете до фазы аутентификации, поэтому вы не получите ошибку Auth fail. Вывод: ваша проблема совсем не та, о которой вы думаете. Покажите нам файл журнала JSch. - person Martin Prikryl   schedule 07.12.2017ssh -v user@host
. Вы проверяли файл журнала на стороне сервера? Также срочно нужно обновить библиотеку JSch. - person Martin Prikryl   schedule 11.12.2017