Безопасное и удобное использование SSH

Настраиваем безопасный сервер

С самого начала мы правильно настроим сервер, конфиг которого обычно находится в файле /etc/ssh/sshd_config.

Одно из самых важных правил - отключить вход под root:

PermitRootLogin no

Следующий вариант для дополнительной безопасности - ограничение на вход определённым пользователям, например (перечисление через пробелы):

AllowUsers user1 user2 user3

Альтернативный вариант - ограничение по группам пользователей:

AllowGroups group1 group2 group3

Существуют так же антонимы AllowUsers, AllowGroups - DenyUsers, DenyGroups. если это необходимо.

Можно поменять порт с 22 на какой-нибудь нестандартный:

Port 6622

Следующим немаловажным шагом является запрет входа по паролю и включение возможности входа по ключам:

PasswordAuthentication no
RSAAuthentication yes
PubkeyAuthentication yes

Настраиваем клиент

Для создания ключей на стороне клиента используется утилита ssh-keygen. Она создаст связку из открытого и закрытого ключа. Весьма рекомендуется при создании ключей указать пароль, чтобы в случае утери/кражи вашего закрытого ключа третье лицо не воспользовалось им.

Связка ключей находится в каталоге ~/.ssh, где id_rsa - ваш закрытый ключ, с которым вы не должны ни с кем делиться и копия которого у вас должна где-то быть, id_rsa.pub - ваш публичный ключ, который необходимо добавить на сервер для входа.

Копируется (хотя как правило - дописывается) он на сервер в файл ~/.ssh/authorized_keys того пользователя под которым должен осуществляться вход. Но лучше использовать утилиту ssh-copy-id, чтобы случайно не затереть чужие открытые ключи и не напортачить с правами доступа. Используется она следующим образом:

$ ssh-copy-id user@host

Где user - имя пользователя для которого должен осуществляться вход, а host - адрес ssh-сервера.

Теперь проверьте вход по ключу и если всё хорошо (если нет - не выполняйте следующую команду!), то есть пароль либо не требуется (если вы его не задавали при создании ключа), либо пароль тот что вы ставили на ключ, то перезапустите ssh-сервер, чтобы применились новые настройки:

$ sudo /etc/init.d/ssh restart

Если вы указывали нестандартный порт, то может быть неудобно каждый раз вводить это всё руками, поэтому можно на клиенте создать файл ~/.ssh/config и вписать в него следующее:

Host host1
Port 6622
HostName example.com
User user1

Теперь можно входить по на сервер по алиасу без имени пользователя и порта:

$ ssh host1

Либо копировать файлы:

$ scp file1 host1:~/

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

$ ssh-add

Ввести один раз пароль после чего все сервера на которые организован вход по ключу ввод пароля требоваться более не будет (как правило до завершения X-сессии, но можно настроить под свои требования).