SSH Secure Shell – это сетевой протокол шифрования, который обеспечивает безопасную зашифрованную связь между двумя хостами.
Он позволяет вам безопасно подключаться к удаленному компьютеру через незащищенную сеть.
Когда вы подключаетесь к системе Linux в первый раз, SSH предлагает вам принять фигерпринт компьютера для успешного установления соединения, поскольку у вас еще его нет в вашем файле «known_hosts».
Фингерпринт – это сокращенная версия открытого ключа системы.
Чтобы защитить себя от атаки Man-in-the-Middle (MITM), программа ssh проверяет ключ удаленной системы с помощью фингерпринта, сохраненного с момента последнего подключения.
Если он изменился, вы получите уведомление и система спросит, хотите ли вы продолжить.
В противном случае вам будет разрешено войти в систему напрямую.
Но иногда вам может потребоваться автоматически принять отпечаток SSH.
Например, если вы создали bash скрипт для запуска на нескольких машинах.
Обратите внимание: вы эффективно обходите предполагаемую безопасность SSH с помощью приведенных ниже методов. Это менее опасно при использовании во внутренней сети, но не рекомендуется использовать его в общедоступном Интернете или других ненадежных сетях.
Это можно сделать двумя следующими способами.
- Автоматически принимать отпечаток ssh с помощью параметра «StrictHostKeyChecking = no» с командой ssh
- Автоматически принимать отпечаток ssh с помощью команды ssk-keycan
Когда вы подключаетесь к удаленному компьютеру в первый раз, вы будете предупреждены о том, что подлинность хоста не может быть установлена, и вам будет предоставлен отпечаток ключа для проверки.
$ ssh root@192.168.1.4
The authenticity of host '192.168.1.4 (192.168.1.4)' can't be established.
ECDSA key fingerprint is 6a:75:e3:ac:5d:f8:cc:04:01:7b:ef:4d:42:ad:b9:83.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.4' (ECDSA) to the list of known hosts.
root@192.168.1.4's password:
Last login: Mon Dec 14 14:16:51 2020 from 192.168.1.6
Как только вы примете фингерпринт, он будет сохранен в файле «known_hosts».
При повторном подключении к тому же удаленному хосту SSH проверяет его в файле known_host, чтобы подтвердить его легитивность.
Если все совпадает, вам будет разрешен прямой доступ к системе, пока ключ остается нетронутым.
Вы увидите следующее предупреждение, если отпечаток не совпадает с файлом known_hosts. Это происходит, если по какой-то причине изменяется открытый ключ хоста.
Если вы видите предупреждение, показаннле ниже, еще раз проверьте, действительно ли вы подключаетесь к правильному хосту через безопасное соединение.
Хотя в большинстве случаев это безвредно, это может указывать и на потенциальную проблему.
$ ssh root@192.168.1.6
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
6a:75:e3:ac:5d:f8:cc:04:01:7b:ef:4d:42:ad:b9:83.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:1
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
********************************************************
Permission denied (publickey,password,keyboard-interactive).
1) Как автоматически принять отпечаток ключа SSH с помощью опции SSH?
Этот метод прост и понятен, для этого нужно только добавить опцию в команде SSH.
Когда вы используете эту опцию, ssh автоматически добавит новый ключ хоста в пользовательский файл known_host и позволит создавать подключения к удаленной системе.
$ ssh -o "StrictHostKeyChecking no" 192.168.1.5
Warning: Permanently added 'centos7,192.168.1.5' (ECDSA) to the list of known hosts.
ok
Однако приведенное выше предупреждение показывает, что система добавила ключ в файл known_host.
2) Как автоматически принять отпечаток ключа SSH с помощью команды ssk-keyscan?
Это еще один метод, он также очень простой.
Инструмент ssh-keycan позволяет вам добавить отпечаток ключа ssh в файл user-known_host на удаленном сервере.
Этот инструмент очень полезен.
Эта команда должна быть вставлена в скрипта перед вызовом фактических команд.
Используйте следующий формат, чтобы добавить отпечаток ключа ssh на удаленный хост.
$ ssh-keyscan -H 192.168.1.4 >> ~/.ssh/known_hosts
#centos:22 SSH-2.0-OpenSSH_7.4
Используйте следующий формат, чтобы добавить отпечаток ключа ssh на несколько хостов.
Для этого вы должны добавить сведения об удаленных хостах в файл и вызвать его с помощью команды ssh-keycan следующим образом.
Например, я добавил пять хостов в файл «remote-hosts.txt».
Вы можете использовать любой текстовый редактор для добавления записей.
Я рекомендую вам использовать vim, самый гибкий и мощный текстовый редактор, широко используемый администраторами и разработчиками Linux.
# vi remote-hosts.txt
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
Если все так, команда ssh-keyscan будет выглядеть следующим образом.
$ ssh-keyscan -f /tmp/remote-hosts.txt >> ~/.ssh/known_hosts
#centos:22 SSH-2.0-OpenSSH_7.4
#centos:22 SSH-2.0-OpenSSH_7.4
#centos:22 SSH-2.0-OpenSSH_7.4
#centos:22 SSH-2.0-OpenSSH_7.4
#centos:22 SSH-2.0-OpenSSH_7.4