Предупреждение | Версии SSHJ до 0.37.0 включительно уязвимы к CVE-2023-48795 — Terrapin. Пожалуйста, обновите версию до 0.38.0 или выше. |
Для начала взгляните на один из примеров. Надеюсь, вам будет приятно работать с API :)
Чтобы получить SSHJ, у вас есть два варианта:
Добавьте в свой проект зависимость от SSHJ.
Постройте SSHJ самостоятельно.
И, если хотите, вы также можете запустить примеры SSHJ.
Двоичные версии SSHJ здесь не представлены, но при желании вы можете загрузить их прямо из центрального репозитория Maven.
Если вы создаете свой проект с помощью Maven, вы можете добавить в pom.xml
следующую зависимость:
< dependency >
< groupId >com.hierynomus</ groupId >
< artifactId >sshj</ artifactId >
< version >0.38.0</ version >
</ dependency >
Если ваш проект создан с использованием другого инструмента сборки, который использует репозиторий Maven Central, переведите эту зависимость в формат, используемый вашим инструментом сборки.
Клонируйте репозиторий SSHJ.
Убедитесь, что у вас установлена Java6 с расширениями шифрования Java неограниченной силы (JCE).
Запустите команду ./gradlew clean build
.
В каталоге examples
есть отдельный проект Maven, в котором показано, как можно использовать библиотеку в некоторых примерах случаев. Если вы хотите запустить их, следуйте этим рекомендациям:
Установите Maven 2.2.1 или более позднюю версию.
Клонируйте репозиторий SSHJ.
Перейдите в каталог examples
и выполните команду mvn eclipse:eclipse
.
Импортируйте проект examples
в Eclipse.
Измените данные для входа в примеры классов (адрес, имя пользователя и пароль) и запустите их!
чтение файловknown_hosts для проверки ключа хоста
аутентификация с открытым ключом, паролем и интерактивной клавиатурой
каналы управления, подсистемы и оболочки
переадресация локальных и удаленных портов
scp + полная реализация sftp версии 0-3
Включены реализации/адаптеры для следующих алгоритмов:
aes{128,192,256}-{cbc,ctr}
, aes{128,256}[email protected]
, blowfish-{cbc,ctr}
, [email protected]
, 3des-{cbc,ctr}
, twofish{128,192,256}-{cbc,ctr}
, twofish-cbc
, serpent{128,192,256}-{cbc,ctr}
, idea-{cbc,ctr}
, cast128-{cbc,ctr}
, arcfour
, arcfour{128,256}
SSHJ также поддерживает следующие расширенные (неофициальные) шифры: camellia{128,192,256}-{cbc,ctr}
, camellia{128,192,256}-{cbc,ctr}@openssh.org
diffie-hellman-group1-sha1
, diffie-hellman-group14-sha1
, diffie-hellman-group14-sha256
, diffie-hellman-group15-sha512
, diffie-hellman-group16-sha512
, diffie-hellman-group17-sha512
, diffie-hellman-group18-sha512
diffie-hellman-group-exchange-sha1
, diffie-hellman-group-exchange-sha256
, ecdh-sha2-nistp256
, ecdh-sha2-nistp384
, ecdh-sha2-nistp521
, [email protected]
SSHJ также поддерживает следующие расширенные (неофициальные) алгоритмы обмена ключами: `[email protected]`, `diffie-hellman-group15-sha256`, `[email protected]`, `[email protected]` `, `diffie-hellman-group16-sha256`, `[email protected]`, `[email protected]`, `[email protected]` `
ssh-rsa
, ssh-dss
, ecdsa-sha2-nistp256
, ecdsa-sha2-nistp384
, ecdsa-sha2-nistp521
, ssh-ed25519
, ssh-rsa2-256
, ssh-rsa2-512
hmac-md5
, hmac-md5-96
, hmac-sha1
, hmac-sha1-96
, hmac-sha2-256
, hmac-sha2-512
, hmac-ripemd160
, [email protected]
[email protected]
, [email protected]
, [email protected]
, [email protected]
, [email protected]
, [email protected]
, [email protected]
zlib
и [email protected]
(zlib с задержкой)
pkcs5
, pkcs8
, openssh-key-v1
, [email protected]
, [email protected]
Если вам нужно что-то, чего нет в комплекте, это не составит труда добавить (внесите это!)
Сравнение реализации SSH
Java 8 или выше
SLF4J 2.0.0
Надувной замок
Отслеживание проблем: https://github.com/hierynomus/sshj/issues.
Развилка!
Устранена уязвимость CVE-2023-48795 — черепаха.
Объединено № 917: реализация расширения строгого обмена ключами OpenSSH.
Объединено № 903: исправление записи строки ключа известного хоста.
Объединено № 913: запретить неограниченный рост буферов переадресации удаленных портов.
Тесты перенесены в JUnit5.
Объединено № 827: возврат к расширению [email protected], если оно доступно.
Объединено №904: добавлена поддержка ChaCha20-Poly1305 для ключей OpenSSH.
Объединено № 899: добавлена поддержка закрытых ключей AES-GCM OpenSSH.
Объединено #901: исправлена ошибка сжатия ZLib.
Объединено № 898: улучшена обработка некорректных файлов для закрытых ключей OpenSSH.
Переписаны интеграционные тесты на JUnit5.
Объединено № 851: исправлено состояние гонки при обмене ключами, вызывающее прерывистый SSH_MSG_UNIMPLEMENTED.
Объединено № 861: добавление DefaultSecurityProviderConfig с отключенным BouncyCastle.
Объединено № 881: Переписаны тестовые классы для движка JUnit Jupiter.
Объединено № 880: удалены утилиты сокетов для резервного копирования Java 7.
Объединено № 879: пользовательский Base64 заменен на java.util.Base64.
Объединено № 852: удалены неиспользуемые методы хеширования паролей bcrypt.
Объединено № 874: минимальная версия Java 8 + обновления зависимостей.
Объединено № 876: изменить newStatefulSFTPClient
, чтобы он возвращал StatefulSFTPClient
Объединено № 860: обновление до Gradle 7.6.1.
Объединение № 838: заменен класс Curve25519 на ключевое соглашение X25519.
Объединено № 772: удалить зависимость от jzlib.
Объединено № 835: улучшено сообщение TimeoutException.
Объединено № 815: Поддержка authPassword во FreeBSD.
Объединено № 813: запретить CHANNEL_CLOSE
между isOpen и вызовом записи.
Объединено № 811: добавление Transport.isKeyExchangeREquired
для предотвращения ненужного KEXINIT.
Объединено № 743: использовать учетные данные клиента по умолчанию для AuthGssApiWithMic.
Объединено № 801: восстановление статуса прерывания потока после перехвата InterruptedException.
Объединение № 793: объединить классы PKCS5 и PKCS8.
Обновлены зависимости SLF4J (1.7.36) и Logback (1.2.11).
Объединено #791: Обновление примеров KeepAlive
Объединено № 775: добавлена поддержка возобновления SFTP.
Обновленные зависимости BouncyCastle (1.70)
Объединено № 687: правильное закрытие соединения, когда удаленное соединение закрывает.
Объединено № 741: добавление поддержки тестовых контейнеров в настройку тестирования для тестирования большего количества сценариев.
Объединено № 733: отправить правильное предложение ключа, если клиент знает ключ CA.
Объединено № 746: исправлена ошибка при чтении файла закрытого ключа Putty с парольной фразой.
Объединено № 742: используйте Config.keyAlgorithms для определения поддержки rsa-sha2.
Объединено № 754: используйте версию протокола SFTP для условной установки флагов переименования FXP.
Объединено № 752: правильно запускать и завершать поток KeepAlive.
Объединение № 753: Обеспечьте более удобные названия тем.
Объединено № 724: добавить параметр для ограничения длины упреждающего чтения.
Объединено № 763: попробуйте все алгоритмы открытого ключа для определенного типа ключа.
Объединено № 756: удаление устаревших методов подключения через прокси.
Объединено № 770: добавлена поддержка ключей ed25519
aes-128-cbc
Объединено № 773: исправлен NPE при чтении пустого OpenSSHKeyV1KeyFile.
Объединено № 777: не запрашивайте слишком много пакетов упреждающего чтения.
Отправлять EOF при закрытии канала (Исправления № 143, № 496, № 553, № 554)
Объединено № 726: анализ ключей OpenSSH v1 с наличием полной информации CRT.
Объединено № 721: предпочтение алгоритма известного ключа хоста для проверки ключа хоста.
Объединены номера 716, 729 и 730: добавлена полная поддержка файлов ключей PuTTY v3.
Объединение №708 и №71: добавлена поддержка закрытых ключей PKCS#8.
Объединено № 703: Поддержка ключей сертификата хоста.
Обновлены зависимости BouncyCastle (1.69), SLF4j (1.7.32), Logback (1.2.6), asn-one (0.6.0)
Объединено № 702: Поддержка аутентификации по открытому ключу с использованием сертификатов.
Объединено № 691: исправление записи отрицательных целых чисел без знака в буфер.
Объединено №682: поддержка шифра [email protected].
Объединено #680: настраиваемое время сохранения для передач SCP.
Увеличенные зависимости (asn-one 0.5.0, BouncyCastle 1.68, slf4j-api 1.7.30)
Объединено №660: поддержка ключей ED25519 и ECDSA в формате PuTTY.
Объединено № 655: Увеличен BouncyCastle из-за CVE.
Объединено № 653: сделать класс параметров доступным в качестве ключа HashMap.
Объединено №647: Уменьшить уровень журнала для анализатора идентификации.
Объединено № 630: добавлена поддержка шифров [email protected]
и [email protected]
.
Объединено #636: Улучшена совместимость с Android.
Объединено № 627: предотвращение утечки ключей.
СЕРЬЕЗНОЕ ИЗМЕНЕНИЕ : удалены setSignatureFactories
и getSignatureFactories
из конфигурации и заменены на getKeyAlgorithms
и setKeyAlgorithms
Исправлено № 588: добавлена поддержка подписей ssh-rsa2-256
и ssh-rsa2-512
Объединено № 579: исправление NPE в OpenSSHKnownHosts.
Объединено № 587: добавление повторной попытки поиска пароля для OpenSSHKeyV1KeyFile.
Объединено № 586: сделать KeyType совместимым с Android Store.
Объединено № 593: изменить UserAuth.getAllowedMethods()
на тип возвращаемого значения Collection.
Объединено #595: Разрешить чтение ключей произвольной длины.
Объединено № 591: разрешить запрос расширений SFTP.
Объединено № 603: добавление метода для создания SFTP-клиента с отслеживанием состояния.
Объединено № 605: используйте потоки Daemon, чтобы избежать блокировки завершения работы JVM.
Объединено № 606: всегда использовать JCERandom RNG по умолчанию.
Объединено № 609: Очистите парольную фразу после использования, чтобы предотвратить проблемы безопасности.
Объединено № 618: исправлен локальный порт DirectConnection для использования с OpenSSH > 8.0.
Объединение #619: Обновлен BouncyCastle до версии 1.66.
Объединено № 622: Отправка ext-info-c с помощью алгоритмов KEX.
Объединено № 623: исправлено транспортное кодирование подписей nistp521
.
Объединение № 607: исправление математических общедоступных ключей для ключевых алгоритмов.
Объединено № 602: исправлено определение ключа сертификата RSA.
Исправлено № 415: исправлен неправильный префикс «/» к пути в SFTPClient.mkdirs.
Добавлена поддержка алгоритмов MAC ETM (Encrypt-then-Mac).
Исправлено № 454: добавлена проверка отсутствующей емкости для Buffer.putUint64.
Исправлено № 466: Добавлен тайм-аут блокировки для удаленных действий, чтобы предотвратить зависание.
Исправлено № 470: EdDSA сделана фабрикой подписей по умолчанию (первой).
Исправлено № 467: добавлен AES256-CBC в качестве режима шифрования в поддержку openssh-key-v1.
Исправлено № 464: включена [email protected] в DefaultConfig.
Исправлено № 472: обработка глобальных запросов, инициированных сервером.
Исправлено № 485: В ключевые файлы openssh-key-v1 добавлена поддержка всех типов ключей.
Исправлено № 413: используйте UTF-8 для PrivateKeyFileResource.
Исправлено № 427: Поддержка зашифрованных файлов ed25519 openssh-key-v1.
Обновлен BouncyCastle до версии 1.60.
Добавлена поддержка MAC-адреса [email protected].
Добавлена поддержка hmac-ripemd160.
Исправлено № 382: Исправлено экранирование в WildcardHostmatcher.
Добавлен набор тестов для интеграции с использованием Docker и OpenSSH.
Исправлено № 187: Исправлена ошибка длины в Buffer.putString.
Исправлено № 405: Продолжить проверку хоста, если первый ключ хоста не совпадает.
Объединение № 372: обновление до «net.i2p.crypto:eddsa:0.2.0».
Исправлены № 355 и № 354: правильное декодирование байтов подписи.
Исправлено № 365: добавлена поддержка отпечатков пальцев OpenSSH ключей сервера в новом стиле.
Исправлено № 356: Исправлено определение типа ключа для открытых ключей ECDSA.
Сделана SSHJ совместимой с Java9.
Исправлено № 341: Исправлено перемещение по пути во время рекурсивного копирования.
Объединено № 338: добавлен ConsolePasswordFinder для чтения пароля из стандартного ввода.
Объединение № 336: добавлена поддержка подписей ecdsa-sha2-nistp384 и ecdsa-sha2-nistp521.
Исправлено № 331: добавлена поддержка подстановочных знаков в файлеknown_hosts.
Объединено № 322: исправлена регрессия из 40f956b (неверный параметр длины в выходном потоке).
Объединение № 319: добавлена поддержка файлов ключей сертификатов [email protected]
и [email protected]
Обновлен Gradle до 3.4.1
Объединение № 305: добавлена поддержка пользовательской кодировки строк.
Исправлено № 312: Обновлен BouncyCastle до версии 1.56.
Объединение № 294: ссылка на ED25519 по константе вместо имени.
Объединены № 293, № 295 и № 301: исправлена упаковка OSGi.
Добавлены новые группы Диффи-Хеллмана 15–18 для более надежных алгоритмов KeyExchange.
Включены ключевые файлы PKCS5 в DefaultConfig.
Объединено № 291: исправлена загрузка sshj.properties и сообщения об исключениях.
Объединено № 284: правильно перехватывать прерывание в потоке поддержки активности.
Исправлено № 292: передать настроенную RandomFactory в Diffie Hellman KEX.
Исправлено № 256: SSHJ теперь строится, если нет репозитория git.
LocalPortForwarder теперь корректно прерывает собственный поток при закрытии().
Исправлено № 276: добавлена поддержка ed-25519 и нового формата ключей OpenSSH.
Исправлено № 280: чтение версии из сгенерированного файла sshj.properties для правильного вывода версии во время переговоров.
Исправлена совместимость с Android.
Обновление до Gradle 3.0
Объединено № 271: Загрузка известных_хостов без использования BouncyCastle.
Объединено № 269: возвращена поддержка Java6 по многочисленным просьбам.
Объединено № 267: добавлена поддержка ведения журнала каждого соединения (исправление № 264).
Объединение № 262, № 265 и № 266: добавлена поддержка файла ключей PKCS5.
Исправлена ошибка toString атрибутов файла sftp (исправление № 258).
Исправлено № 255: Больше не зависит от «частно отмеченных» классов в пакете net.i2p.crypto.eddsa.math
, исправляет зависимости OSGI.
Снисходительное отношение к строке идентификации SSH-сервера, заканчивающейся на 'n' вместо 'rn'.
Улучшен анализ идентификации SSH-сервера. Слишком длинные строки заголовка больше не нарушают протокол.
Внесено критическое изменение в поведение копирования SFTP : ранее операция копирования SFTP вела себя по-разному, если исходная и целевая папки были папками с разными именами. В этом случае вместо копирования содержимого источника в целевой каталог сам каталог копируется как подкаталог целевого каталога. Это поведение было удалено в пользу поведения по умолчанию, которое заключается в копировании содержимого источника в целевой объект. Приведение поведения в соответствие с тем, как работает SCP.
Исправлено № 252 (через: № 253): подкаталоги с одинаковыми именами больше не объединяются случайно.
Исправлено № 239: Удаленная переадресация портов не работала, если вы использовали пустую строку в качестве адреса или универсальный адрес.
Исправлено № 242: Добавлены заголовки OSGI в манифест исходного файла jar.
Исправлено № 236: перенаправление удаленных портов с динамическим распределением портов завершается с ошибкой BufferUnderflowException.
Обновлен дистрибутив Gradle до 2.12.
Закрыто № 234: прекращена поддержка Java6 (версия 0.15.0 уже была несовместима с Java6 из-за зависимости от Java7).
Исправлено № 118: добавлен переключатель конфигурации для ожидания идентификатора сервера перед отправкой идентификатора клиента.
Исправлено № 114: добавлен Javadoc, который всегда нужно вызывать close() для команды перед проверкой кодов выхода.
Исправлено № 237: Исправлено состояние гонки, если глобальный запрос [email protected]
получен непосредственно после успешной аутентификации.
Исправлено № 220: добавлена поддержка ключей хоста ssh-ed25519
Исправлено № 225: Исправлена ошибка в расчете отпечатка пальца ECDSA, из-за которой иногда получался неправильный отпечаток пальца.
Добавлены потоковые шифры arcfour
из RFC4253 и RFC4345.
Добавлены все блочные шифры из RFC4344 и RFC4253.
Исправлено № 171: добавлена поддержка алгоритма обмена ключами [email protected]
Добавлена поддержка алгоритмов обмена ключами ecdh-sha2-nistp256
, ecdh-sha2-nistp384
и ecdh-sha2-nistp521
Исправлено № 167: добавлена поддержка методов обмена ключами diffie-hellman-group-exchange-sha1
и diffie-hellman-group-exchange-sha256
Исправлено № 212: Настройте экранирование пути, чтобы расширение оболочки работало правильно.
Объединено № 210: RemoteFileInputStream.skip возвращает неправильное значение (исправление № 209).
Объединено № 208: добавлена поддержка ограничения пропускной способности SCP.
Объединено № 211: определение формата ключевого файла стало более надежным.
Объединено № 199: исправлено исключение IndexOutOfBoundsException в ReadAheadRemoteFileInputStream, исправления № 183.
Объединено № 195: поддерживается новая аутентификация: gssapi-with-mic
Объединено № 201: новая опция для проверки согласованных алгоритмов обмена ключами.
Объединено № 196: исправление поиска полного имени хоста в файле известных хостов.
Добавлена поддержка HTTP-прокси при запуске JDK6 или JDK7, исправления: #170.
Объединено № 186: исправление обнаружения конца потока.
Компиляция в JDK6, исправления № 179 и № 185.
Правильно закрывать сокет и канал, когда LocalPortForwarder не удается открыть и запустить канал (исправления № 175 и № 176).
Объединено № 181: Неверная длина пакета записи при чтении со смещением (Исправление № 180).
Новые координаты maven com.hierynomus:sshj:0.11.0
поскольку @hierynomus занял пост сопровождающего SSHJ.
Система сборки перенесена на Gradle 2.2.1.
Объединено № 150: исправление неправильного дескриптора файла на некоторых SSH-серверах, исправления: № 54, № 119, № 168, № 169.
jzlib
стал необязательным в комплекте OSGi, исправления: #162.
Улучшены некоторые уровни журнала, исправления: #161.
Объединены № 156, № 164, № 165: фиксированные размеры блоков для hmac-sha2-256
и hmac-sha2-512
Объединение № 141: Добавить поддержку прокси.
Объединение № 157, № 163: исправления документации и сборки.
BouncyCastle обновлен до версии 1.51, исправления: #142.
Реализовано сохранение активности с обнаружением разрыва соединения, исправления № 166.