ssh
Про fingerprint
Fingerprint SSH-ключа - это уникальный идентификатор для проверки подлинности ключа при подключении к удаленному серверу по протоколу SSH. Он вычисляется как хэш-сумма открытого ключа и сохраняется в локальном кэше клиентского приложения.
При подключении к серверу по SSH, клиент проверяет fingerprint открытого ключа сервера с сохраненным в локальном кэше. Если fingerprint не совпадает, это может свидетельствовать о возможной атаке MITM.
Fingerprint SSH-ключа защищает от атак MITM и позволяет проверить подлинность ключа сервера. Важно хранить fingerprint ключа в безопасном месте и не доверять подключениям с неизвестными fingerprint-ами.
Посмотреть известные отпечатки можно в файле ~/.ssh/known_hosts
Подключение по ssh ключам
Если нет ключа - создай
Закинуть публичный ключ на сервер можно специальной командой:
Публичный ключ сохранится на сервере в файле ~/.ssh/authorized_keys.
Можно и самому содержимое id_rsa.pub вставить в ~/.ssh/authorized_keys - та же самая операция, по сути.
Теперь надо отключить авторизацию по паролю. На сервере выполняем:
И в vim-е надо:
- Раскомментировать строку PasswordAuthentication и выставить значение no.
- Проверить, чтобы директива ChallengeResponseAuthentication выставлена no.
- Выставить UsePAM на no
PAM (Pluggable Authentication Modules) является модульной системой аутентификации, которая позволяет использовать различные методы аутентификации. Если параметр UsePAM установлен в “yes”, OpenSSH сервер будет использовать PAM для проверки учетных данных пользователей. Если параметр UsePAM установлен в “no”, OpenSSH сервер будет использовать встроенную систему аутентификации.
Параметр UsePAM может быть полезен, если необходимо настроить дополнительные функции аутентификации, которые не поддерживаются встроенной системой аутентификации OpenSSH, например, двухфакторную аутентификацию, проверку наличия пользователя в определенной группе и т.д. Однако, использование PAM может увеличить нагрузку на сервер и ухудшить производительность, поэтому рекомендуется использовать этот параметр. - И убрать возможность логиниться в root (ради безопасности (я обычно и порт меняю с дефолтного на 2594, к примеру)), то есть выставить PermitRootLogin значение no
В итоге должно получиться так:
Port 2594
PubkeyAuthentication yes
PermitRootLogin no
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
Чтобы изменения вступили в силу, надо рестартнуть sshd:
После этого может вылезти предупреждение о том, что fingerprint SSH ключа сервера не соответствует fingerprint-у, который был сохранен в файле known_hosts на нашем пк. Там же ssh предложит выполнить команду, которая всё исправит, удалив старый отпечаток:
И под конец можно еще добавить приватный ключ в ssh-agent, чтобы он не спрашивал каждый раз passphrase, и если у тебя ssh ключей много для разных целей, то это как раз и поможет ssh-agent-у понять - какой ключ использовать для подключения к серверу, и не будет просить указать нужный ключ:
Но ssh-agent работает только во время сессии - если ребутнуть пк, то придется заново вводить всё.
Однако, вы можете настроить автоматическое добавление ключей SSH в агент при запуске системы. Для этого нужно создать скрипт, который будет выполнен при старте системы и добавлять ключи в агент аутентификации SSH. Таким образом, вы сможете избежать необходимости добавлять ключи каждый раз после перезагрузки компьютера.
Запуск локальных скриптов по ssh
При чем, вывод скрипта возвращается в локальную систему (которую можно перенаправить).