Соединение SFTP через Java / jsch с аутентификацией Kerberos или UnknownHostKey [дубликат]

Этот скрипт помогает изменить изображение при нажатии на текст:




The Human Body Parts :

  • Human-body-organ-diag-1
  • Human-body-organ-diag-2
  • Human-body-organ-diag-3
  • Human-body-organ-diag-4
  • Human-body-organ-diag-5
  • Human-body-organ-diag-6
  • Human-body-organ-diag-7
  • Human-body-organ-diag-8
  • Human-body-organ-diag-9
  • Human-body-organ-diag-10

sanwebcorner.com

см. demo here

10
задан Martin Prikryl 30 September 2015 в 06:49
поделиться

2 ответа

Вы пытаетесь пропустить проверку ключа хоста, установив StrictHostKeyChecking на no.

Но вы должны сделать это перед проверкой, то есть перед session.connect().


В любом случае, вы никогда не должны этого делать, если вам не нужна безопасность. Проверка ключа хоста защищает вас от атак man-in-the-middle .

Вместо этого настройте ожидаемый ключ хоста, чтобы JSch проверил его.

Например:

  • Вызов JSch.setKnownHosts, обеспечивающий путь к файлу .ssh/known_hosts. Для генерации .ssh/known_hosts -подобного файла вы можете использовать команду ssh-keyscan из OpenSSH. Если вы подключаетесь к серверу * nix, вы должны иметь доступную команду, просто запустите
    ssh-keyscan example.com > known_hosts
    
    . Он будет иметь формат, такой как:
    example.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0hVqZOvZ7yWgie9OHdTORJVI5fJJoH1yEGamAd5G3werH0z7e9ybtq1mGUeRkJtea7bzru0ISR0EZ9HIONoGYrDmI7S+BiwpDBUKjva4mAsvzzvsy6Ogy/apkxm6Kbcml8u4wjxaOw3NKzKqeBvR3pc+nQVA+SJUZq8D2XBRd4EDUFXeLzwqwen9G7gSLGB1hJkSuRtGRfOHbLUuCKNR8RV82i3JvlSnAwb3MwN0m3WGdlJA8J+5YAg4e6JgSKrsCObZK7W1R6iuyuH1zA+dtAHyDyYVHB4FnYZPL0hgz2PSb9c+iDEiFcT/lT4/dQ+kRW6DYn66lS8peS8zCJ9CSQ==
    
    И ссылается на сгенерированный файл known_hosts в вашем JSch-коде. Если вы находитесь в Windows, вы можете получить сборку Windows из проекта Win32-OpenSSH или Git для Windows.
  • Вызов JSch.getHostKeyRepository().add(), чтобы обеспечить ожидаемый ключ хоста (например, жестко запрограммированные, как и другие учетные данные). См. Создание экземпляра JSch HostKey из открытого ключа в формате .pub .
16
ответ дан Martin Prikryl 16 August 2018 в 10:48
поделиться
  • 1
    Как сделать шаг «настроить ожидаемый ключ хоста, чтобы позволить JSch проверить его. & Quot; , благодаря – Coffee 30 September 2015 в 15:30
  • 2
    Я добавил пример для генерации файла known_hosts. – Martin Prikryl 1 October 2015 в 06:37
  • 3
    Я попытался запустить ssh-keyscan example.com > known_hosts в Cygwin (в Windows), но я не уверен, что делать дальше здесь .. он загружен на моей машине? благодаря – Coffee 1 October 2015 в 14:11
  • 4
    1) Надеюсь, вы поняли, что example.com следует заменить фактическим именем / IP-адресом сервера SSH. 2) Если вы запускаете его локально, файл сохраняется локально (загрузка не требуется). Просто введите путь к сгенерированному файлу known_hosts и передайте его в JSch.setKnownHosts. 3) Убедитесь, что known_hosts выглядит как пример в моем ответе. – Martin Prikryl 1 October 2015 в 14:21
  • 5
    Хорошо, я понимаю сейчас, спасибо огромное! – Coffee 1 October 2015 в 14:22

Кроме того: «Cygwin», я предполагаю, что вы имеете в виду sshd или sftpd, потому что сам Cygwin не выполняет SSH.

В любом случае, если вы хотите, чтобы клиент Jsch принимал любой ключ от хоста, переместите .setConfig, который устанавливает StrictHostKeyChecking no так, как раньше session.connect(). В качестве альтернативы вы должны предоставить доступ к хранилищу, содержащему правильный ключ (ы) для ваших хостов (ов), как объясняет @Martin, - и вы всегда должны делать это при подключении к чему-либо, кроме «localhost» или, возможно, к машине, тот же физически защищенный сегмент сети (например, проводной сетевой концентратор в одной комнате).

1
ответ дан dave_thompson_085 16 August 2018 в 10:48
поделиться
  • 1
    & quot; вы должны & quot; : Пожалуйста, не предлагайте никому не проверять ключ хоста SSH. По крайней мере, не без объяснения последствий. Это ужасная ошибка безопасности. – Martin Prikryl 30 September 2015 в 06:09
  • 2
    @Martin хороший момент, добавил – dave_thompson_085 30 September 2015 в 06:41
  • 3
    Кстати, что sftpd? – Coffee 30 September 2015 в 16:36
  • 4
    @Coffee Я имел в виду «любой сервер (в Unix обычно что-то), который реализует sftp конкретно, но не остальную часть ssh». Для Linux это обычно (не всегда) vsftpd, но я не знаю о cygwin. Вероятно, я должен был сказать «sftp server». – dave_thompson_085 1 October 2015 в 01:00
  • 5
    @ dave_thompson_085 Для Linux это OpenSSH, а не vsftpd. То же самое для Cygwin. – Martin Prikryl 1 October 2015 в 14:26
Другие вопросы по тегам:

Похожие вопросы: