Я программирую приложение на Java. Это приложение устанавливает соединение между двумя ПК (один Windows и один Linux). Мое приложение должно установить соединение и выполнить несколько команд. Среди команд я хочу передать файл.
Это соединение SSH с протоколом SCP.
Мне удалось установить соединение с JSCH, я нашел команду для передачи файла, но сейчас у меня проблема.
Моя команда для передачи файла:
scp -r -p path1 ***@***.***.***.***:path2;
Но когда я запускаю программу, у меня появляется такое сообщение:
Host '***.***.***.***' is not in the trusted hosts file.
(fingerprint md5 CLE)
Do you want to continue connecting? (y/n)
Но это сообщение находится на моей консоли, в моем приложении Java, поэтому я не отправляю y или n. Я продолжил поиск известного_хоста, но это ничего не дало.
Я пробую это:
jsch.setKnownHosts(System.getProperty("user.home") + "/.ssh/known_hosts");
session.setConfig("StrictHostKeyChecking", "no");
Или это (в моих файлах hosts):
ssh -o StrictHostKeyChecking=no username@hostname.com
Или это :
Host 192.168.0.*
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
Но ничего не работает, не понимаю логики. Какой файл хоста мы должны изменить? К какому из компьютеров я хочу подключиться или какой компьютер подключается?
Если вам нужны более подробные сведения о моей программе, скажите мне.
Спасибо !
Если вам все еще интересно.
StrictHostKeyChecking - это мера безопасности, используемая для противодействия атакам типа «злоумышленник в середине». Когда вы подключаетесь к новому серверу через SSH, он уведомляет пользователя о том, что это новый компьютер, и я никогда не подключался к нему раньше, поэтому я ему не доверяю, так что вы хотите сделать? Это в основном то, что означает это сообщение.
Host '***.***.***.***' is not in the trusted hosts file.
(fingerprint md5 CLE)
Do you want to continue connecting? (y/n)
Если вы ответите утвердительно, он добавит открытый ключ этого сервера в $HOME/.ssh/known_hosts
машины, работающей ssh user@ip
. Что-то вроде этого:
192.168.1.136 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJj/87wetLDd27TX+JEIPxWZbu4DJXjYYM9IQZoCKBCi8H66cXgrT4M0Vf9x8OE7R8Vnz5JkVnnAoic311mQB44=
В случае атаки «человек посередине» вы увидите что-то вроде этого:
user@hostname ~]$ ssh user@ip
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
6e:45:f9:a8:af:38:3d:a1:a5:c7:76:1d:02:f8:77:00.
Please contact your system administrator.
Add correct host key in /home/hostname /.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/hostname/.ssh/known_hosts:4
RSA host key for pong has changed and you have requested strict checking.
Host key verification failed.
Это сообщение часто встречается, если вы повторно инициализируете сервер на том же IP-адресе, что и тот, который вы подключались в прошлом, для этого вам нужно удалить строку 4 и снова пройти процесс доверия.
Пароль запроса PuTTY
С SSH вы можете использовать аутентификацию с закрытым ключом с открытым ключом или пароль. Большинство системных администраторов удаляют функцию пароля, поскольку это может дать хакерам преимущество использовать что-то вроде грубой силы или радужной таблицы для получения доступа.
Чтобы избавиться от пароля, вам нужно добавить открытый ключ вашего компьютера (тот, который запускает java) в серверный $HOME/.ssh/authorized_keys
файл.
Эта команда распечатает открытый ключ текущего используемого закрытого ключа: ssh-add -L
. Или вы можете найти это в своей машине $HOME/.ssh/id_*.pub
. * будет какое-то слово в зависимости от типа ключа, скорее всего RSA. Поскольку вы используете Putty, вам нужно принять второй подход. Если у вас нет SSH-ключа, Putty также может создать его для вас.
Теперь он не будет спрашивать ваш пароль при следующей попытке входа в систему.
Это файл ~ / .ssh / known_hosts. Вы проверили, что файл обновляется с использованием правильного ключа? В качестве теста вы можете попробовать ssh из командной строки, а затем принять открытый ключ. Таким образом, хост будет добавлен в ваш ~ / .ssh / known_hosts, и тогда вы больше не должны получать ошибку. Обычно StrictHostKeyChecking no
не рекомендуется для обеспечения безопасности.