net.schmizz.sshj.transport.TransportException: невозможно достичь урегулирования

1

Я пытаюсь сделать ssh в другую машину, используя SSHJ. PFA-код ниже (исключены блоки try/catch/finally).

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
final SSHClient sshClient = new SSHClient();
sshClient.addHostKeyVerifier(new PromiscuousVerifier());
sshClient.connect("test-hostname");
sshClient.authPublickey("test-user", private_key_path);
Session session = sshClient.startSession();
Session.Command cmd = session.exec(TEST_SSH_COMMAND);
cmd.join(5, TimeUnit.SECONDS);
if(cmd.getExitStatus() == 0) {
   System.out.println("Success");
}

Когда я пытаюсь выполнить вышеуказанную программу, я получаю следующую ошибку

[reader] n.s.sshj.transport.TransportImpl - Dying because -net.schmizz.sshj.transport.TransportException: Unable to reach a settlement: [] and [aes128-ctr, aes192-ctr, aes256-ctr, arcfour256, arcfour128, aes128-cbc, 3des-cbc, blowfish-cbc, cast128-cbc, aes192-cbc, aes256-cbc, arcfour, [email protected]]
2014-07-01 20:45:09,021 INFO  [reader] n.s.sshj.transport.TransportImpl - Disconnected - UNKNOWN
2014-07-01 20:45:09,023 ERROR [pool-3-thread-1] net.schmizz.concurrent.Promise - <<kex done>> woke to: net.schmizz.sshj.transport.TransportException: Unable to reach a settlement: [] and [aes128-ctr, aes192-ctr, aes256-ctr, arcfour256, arcfour128, aes128-cbc, 3des-cbc, blowfish-cbc, cast128-cbc, aes192-cbc, aes256-cbc, arcfour, [email protected]]

2014-07-01 20: 45: 09,024 INFO [пул-3-нить-1] nssshj.transport.TransportImpl - отключен - BY_APPLICATION

Может кто-то помочь мне отладить проблему.

Благодарю.

  • 0
    Вы получили ответ на это? Я также получаю ту же ошибку
  • 0
    Нет, я не получил никакого ответа. Я начал использовать JSch, и он работает нормально.
Показать ещё 2 комментария
Теги:
sshj

3 ответа

0

Я столкнулся с той же проблемой при развертывании кластера Cloudera. Убедитесь, что на клиентских и серверных наборах поддерживаемых MAC-адресов есть непустое пересечение.

Например, я получил:

net.schmizz.sshj.transport.TransportImpl: Dying because - net.schmizz.sshj.transport.TransportException: Unable to reach a settlement: [hmac-sha1, hmac-sha1-96, hmac-md5, hmac-md5-96] and [[email protected], [email protected], [email protected], hmac-sha2-512, hmac-sha2-256, hmac-ripemd160]

Исправление состоит в том, чтобы добавить по крайней мере один из MAC-адресов клиента к серверам, поддерживаемым сервером. На Ubuntu 14.04.2 LTS с SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2 просто редактирует MACs SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2 в /etc/ssh/sshd_config.

Не совсем уверен в значениях безопасности здесь, то есть некоторые методы могут быть обескуражены как слабые, но вы получаете идею, клиенту и серверу нужно опираться на один. Также обратите внимание, что именно клиент делает выбор, сервер будет адаптироваться.

Не забудьте перезапустить сервер (Ubuntu, как указано выше): service ssh restart.

0

У меня была та же проблема, и проблема была в классе. Другая библиотека (winzipaes) имела зависимость от другой версии auf Bouncycastle (bcprov-jdk16), которая, казалось, конфликтует с версией jdk15, на которую ссылается SSHJ.

Явное исключение версии jdk16 помогло мне (однако я еще не тестировал код, который использует winzipaes).

0

Я не смог найти решение этой проблемы. Вместо этого я начал использовать JSch, и теперь он работает нормально.

java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");

Session session = null;
ChannelExec channel = null;

    try {
            JSch jSch = new JSch();
            jSch.addIdentity("/tmp/privatekey");

            session = jSch.getSession("testuser", address, 22);
            session.setConfig(config);
            session.connect();

            channel = (ChannelExec) session.openChannel("exec");
            BufferedReader in = new BufferedReader(new InputStreamReader(channel.getInputStream()));
            channel.setCommand(command);
            channel.connect();

            if (channel.getExitStatus() == 0 || channel.isClosed() || channel.isEOF()) {
                logger.info("SSH connection is successful!");                    
            }
            in.close();
        } catch (JSchException jsche) {
            logger.error("Trying to SSH to host: {} but got exception {}", address, jsche);                
        } finally {
            if (channel != null) channel.disconnect();
            if (session != null) session.disconnect();
        }
  • 1
    У JSch есть свои проблемы .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню