JSCH Auth Ошибка при попытке FTP-доступа к файлу

Я поддерживаю устаревшее веб-приложение, и одна из функций - использовать 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


person H. Miller    schedule 07.12.2017    source источник
comment
Вы используете StrictHostKeyChecking=no (что является недостатком безопасности, кстати), поэтому никакое изменение ключа хоста сервера не может вызвать у вас никаких проблем. Даже если бы это было так, вы никогда не дойдете до фазы аутентификации, поэтому вы не получите ошибку Auth fail. Вывод: ваша проблема совсем не та, о которой вы думаете. Покажите нам файл журнала JSch.   -  person Martin Prikryl    schedule 07.12.2017
comment
Можете ли вы подключиться к этому серверу напрямую через sftp или ssh? Вы пытались использовать какой-либо из этих ключей для подключения вместо пароля?   -  person Ivan    schedule 07.12.2017
comment
Да, я могу подключиться к серверу по SSH. Будет ли использование ключей включать использование jsch.addIdentity (privateKey), где закрытый ключ является ключом на исходном сервере? Я работаю над добавлением журнала, чтобы получить более подробную информацию о Jsch.   -  person H. Miller    schedule 08.12.2017
comment
Да, чтобы использовать закрытый ключ, вам нужно использовать jsch.addIdentity ()   -  person Ivan    schedule 09.12.2017
comment
Я добавил логи из jsch. Если я правильно понимаю, похоже, что он не использует какие-либо методы аутентификации, включая пароль. Должен ли я использовать jsch.setUserInfo?   -  person H. Miller    schedule 11.12.2017
comment
Покажите нам вывод ssh -v user@host. Вы проверяли файл журнала на стороне сервера? Также срочно нужно обновить библиотеку JSch.   -  person Martin Prikryl    schedule 11.12.2017