Почему программный SSH к серверу, использующему ganymed-ssh-2, приводит к ошибке обмена ключами? - PullRequest
0 голосов
/ 20 февраля 2019

Я использую библиотеку Java ganymed-ssh-2 для создания соединения между одним AWS EC2 и другим (в том же VPC), и команда connect () 'выдает следующую ошибку:

java.io.IOException: Key exchange was not finished, connection is closed.
    at ch.ethz.ssh2.transport.KexManager.getOrWaitForConnectionInfo(KexManager.java:75)
    at ch.ethz.ssh2.transport.TransportManager.getConnectionInfo(TransportManager.java:169)
    at ch.ethz.ssh2.Connection.connect(Connection.java:759)
    at ch.ethz.ssh2.Connection.connect(Connection.java:628)
    at bravura.autoperf.executor.SSHExecutor.connectTo(SSHExecutor.java:156)
    at bravura.autoperf.executor.SSHExecutor.runRemoteSSHCommand(SSHExecutor.java:57)
    at bravura.autoperf.executor.SSHExecutor.runRemoteSSHCommand(SSHExecutor.java:141)
    at bravura.autoperf.util.Utilities.runCommandRepeatedly(Utilities.java:614)
    at bravura.autoperf.test.Server.getServerDetails(Server.java:233)
    at bravura.autoperf.test.Server.<init>(Server.java:127)
    at bravura.autoperf.test.Server.<init>(Server.java:65)
    at bravura.autoperf.util.Utilities.getClientServer(Utilities.java:499)
    at bravura.autoperf.manager.RunSetupManager.<init>(RunSetupManager.java:69)
    at bravura.autoperf.manager.ExecutionManager.runTests(ExecutionManager.java:171)
    at bravura.autoperf.manager.ExecutionManager.main(ExecutionManager.java:64)
Caused by: java.io.IOException: Cannot negotiate, proposals do not match.
    at ch.ethz.ssh2.transport.ClientKexManager.handleMessage(ClientKexManager.java:123)
    at ch.ethz.ssh2.transport.TransportManager.receiveLoop(TransportManager.java:572)
    at ch.ethz.ssh2.transport.TransportManager$1.run(TransportManager.java:261)
    at java.lang.Thread.run(Thread.java:748)

Код вызова:

    Connection connection = new Connection(host);
    connection.connect();

Это до того, как у метода authenticateWithPublicKey () был шанс вызвать.

NACL и соответствующая группа безопасности открыты длятрафик порта 22 для диапазона CIDR VPC (в котором находятся оба экземпляра).Таблица маршрутизации маршрутизирует весь трафик VPC CIDR локально.

Я могу ssh вручную без проблем.

(ОС - Amazon Linux 2 fwiw)

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 20 февраля 2019

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

Причина: java.io.IOException: Невозможно договориться, предложения не совпадают.

Вы можете легко увидеть, что сервер поддерживает, выполнив командную строку

ssh -vv user @ host

Наиболее вероятная причина - шифр, HMAC или алгоритм обмена ключами.Я полагаю, что обмен ключами произошел за последние годы, и современные серверы могут быть настроены на более надежный обмен ключами после обнаружения уязвимостей, таких как Logjam

* 1016.* Чтобы на самом деле решить проблему, потребуется обновить клиентскую библиотеку до того, что поддерживает алгоритм, который отсутствует.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...