Fingerprint

Fingerprint SSH-ключа - это уникальный идентификатор для проверки подлинности ключа при подключении к удаленному серверу по протоколу SSH. Он вычисляется как хэш-сумма открытого ключа и сохраняется в локальном кэше клиентского приложения.

При подключении к серверу по SSH, клиент проверяет fingerprint открытого ключа сервера с сохраненным в локальном кэше. Если fingerprint не совпадает, это может свидетельствовать о возможной атаке MITM.

Fingerprint SSH-ключа защищает от атак MITM и позволяет проверить подлинность ключа сервера. Важно хранить fingerprint ключа в безопасном месте и не доверять подключениям с неизвестными fingerprint-ами.

Посмотреть известные отпечатки можно в файле ~/.ssh/known_hosts

Подключение по ssh ключам

Если нет ключа - создай:

ssh-keygen

Неинтерактивное создание ssh ключа без passphrase

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""

Закинуть (🤙) public key на сервер можно с помощью ssh-copy-id:

ssh-copy-id -i /path/to/ssh-key.pub -p <port> user@server

Публичный ключ сохранится на сервере в файле ~/.ssh/authorized_keys.
Можно и самому содержимое id_rsa.pub вставить в ~/.ssh/authorized_keys - та же самая операция, по сути.

Теперь надо отключить авторизацию по паролю на сервере:

/etc/ssh/sshd_config
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
PermitRootLogin no

И sudo systemctl restart sshd.

Про UsePAM

PAM (Pluggable Authentication Modules) является модульной системой аутентификации, которая позволяет использовать различные методы аутентификации. Если параметр UsePAM установлен в yes, OpenSSH сервер будет использовать PAM для проверки учетных данных пользователей. Если параметр UsePAM установлен в no, OpenSSH сервер будет использовать встроенную систему аутентификации.
Параметр UsePAM может быть полезен, если нужно настроить доп. функции аутентификации, которые не поддерживаются встроенной системой аутентификации OpenSSH, например, 2FA, проверку наличия пользователя в определенной группе и т.д. Но использование PAM может увеличить нагрузку на сервер и ухудшить производительность, поэтому рекомендуется отключать его.

Несоответствие отпечатков

После этого может вылезти предупреждение о том, что fingerprint SSH ключа сервера не соответствует fingerprint-у, который был сохранен в файле known_hosts на нашем пк. Там же ssh предложит выполнить команду, которая всё исправит, удалив старый отпечаток.

По типу такого

ssh-keygen -f "/home/${USER}/.ssh/known_hosts" -R "[192.168.1.14]:2594"

И под конец можно еще добавить приватный ключ в ssh-agent, чтобы он не спрашивал каждый раз passphrase, и если у тебя ssh ключей много для разных целей, то это как раз и поможет ssh-agent-у понять - какой ключ использовать для подключения к серверу, и не будет просить указать нужный ключ:

ssh-add /path/to/private_key

Посмотреть добавленные ключи можно так:

ssh-add -l

Но ssh-agent работает только во время сессии - если ребутнуть пк, то придется заново вводить всё. Есть разные способы решить это 🥱🥱…

Запуск локальных скриптов по ssh

ssh myserver bash < ./some_script.sh

Daaamn

Вывод скрипта возвращается в локальную систему (которую можно перенаправить).