Я новичок в области безопасности и хотел бы разобраться в этой ошибке, которую я получаю:
com.jcraft.jsch.JSchException: UnknownHostKey: 127.0.0.1. Отпечаток ключа RSA: a2:39:3f:44:88:e9:1f:d7:d1:71:f4:85:98:fb:90:dc в com.jcraft.jsch.Session.checkHost(Session.java:797) в com.jcraft.jsch.Session.connect(Session.java:342) в com.jcraft.jsch.Session.connect(Session.java:183) в FileTransfer.main(FileTransfer.java:37) Процесс завершен с кодом выхода 0.
что означает `unknownHostKey: 127.0.0.1. Ключ RSA
отпечаток пальца a2:39:3f:44:88:e9:1f:d7:d1:71:f4:85:98:fb:90:dc`
Мне нужно задать файл с именем known_hosts
file, чтобы исправить эту ошибку:
Я попробовал настроить это так:
127.0.0.1
Но это не работает. Я неправильно понимаю, что подразумевается под known_hosts
файлом?
решение1
За этот ответ стоит поблагодаритьЖильизСайт безопасности StackExchange, как его/еепочтаОбъяснение known_hosts
и authorized_keys
файлы — хорошая отправная точка для понимания этого компонента SSH/SFTP.
См. ниже:
Файл known_hosts
позволяет клиенту аутентифицировать сервер, чтобы проверить, что он не подключается к имитатору. Файл authorized_keys
позволяет серверу аутентифицировать пользователя.
Аутентификация сервера
Одно из первых действий, которое происходит при установке SSH-соединения, заключается в том, что сервер отправляет свой открытый ключ клиенту и подтверждает (благодарякриптография с открытым ключом) клиенту, что он знает связанный с ним закрытый ключ. Это аутентифицирует сервер: если эта часть протокола успешна, клиент знает, что сервер является тем, за кого себя выдает.
Клиент может проверить, что сервер известен, а не какой-то мошеннический сервер, пытающийся выдать себя за правильный. SSH предоставляет только простой механизм для проверки легитимности сервера: он запоминает серверы, к которым вы уже подключались, в файле ~/.ssh/known_hosts
на клиентской машине (есть также общесистемный файл /etc/ssh/known_hosts
). Когда вы подключаетесь к серверу в первый раз, вам нужно проверить другими способами, что открытый ключ, представленный сервером, действительно является открытым ключом сервера, к которому вы хотите подключиться. Если у вас есть открытый ключ сервера, к которому вы собираетесь подключиться, вы можете добавить его ~/.ssh/known_hosts
на клиенте вручную.
Кстати, known_hosts
может содержать любой тип открытого ключа, поддерживаемый реализацией SSH, а не только DSA (также RSA и ECDSA).
Аутентификация сервера должна быть выполнена до отправки на него любых конфиденциальных данных. В частности, если аутентификация пользователя включает пароль, пароль не должен быть отправлен на неаутентифицированный сервер.
Аутентификация пользователя
Сервер позволяет удаленному пользователю войти в систему только в том случае, если этот пользователь может доказать, что у него есть право доступа к этой учетной записи. В зависимости от конфигурации сервера и выбора пользователя, пользователь может предоставить одну из нескольких форм учетных данных (список ниже не является исчерпывающим).
- Пользователь может ввести пароль для учетной записи, в которую он пытается войти; затем сервер проверяет правильность пароля.
- Пользователь может предоставить открытый ключ и доказать, что он владеет закрытым ключом, связанным с этим открытым ключом. Это точно такой же метод, который используется для аутентификации сервера, но теперь пользователь пытается доказать свою личность, а сервер проверяет ее. Попытка входа принимается, если пользователь доказывает, что он знает закрытый ключ, а открытый ключ находится в списке авторизации учетной записи (
~/.ssh/authorized_keys
на сервере). - Другой тип метода предполагает делегирование части работы по аутентификации пользователя клиентской машине. Это происходит в контролируемых средах, таких как предприятия, когда многие машины используют одни и те же учетные записи. Сервер аутентифицирует клиентскую машину тем же механизмом, который используется наоборот, а затем полагается на клиента для аутентификации пользователя.