Беспарольный ssh достаточно частое явление в жизни системного администратора unix. Я бы даже сказал, что такое соединение в какой-то степени более надежное чем вход по паролю. Ведь пароль можно подсмотреть или просто подобрать. А при беспарольном соединении на сервере должен находиться публичный ключ, а на клиенте секретный ключ. Вход без ключа отключить. И тогда если у тебя нет ключика на сервер и не попасть по ssh 🙂
А еще можно связку ключ-публичный ключ обезопасить парольной фразой, тогда точно авторизация ssh будет криптостойкой.
Генерируем пару ключей для такого ssh соединения. Выполнять команду будем на клиенте (на той машине откуда будем выполнять ssh соединение), ведь именно тут будет храниться наш секретный ключ. Убедимся что директория .ssh создана в вашем домашнем каталоге и имеет права 600. Теперь выполняем
mik@m1k:~$ ssh-keygen -t dsa -b 1024 -f /home/user/.ssh/id_dsa
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_dsa.
Your public key has been saved in /home/user/.ssh/id_dsa.pub.
The key fingerprint is:
95:e8:94:83:74:5c:63:0a:e1:4d:6d:77:30:86:aa:7b mik@m1k
The key's randomart image is:
+--[ DSA 1024]----+
| +ooo+.+. |
| o *.=++... |
| o Boo. . |
| o.o |
| .S |
| . |
| . |
| . E |
| . |
+-----------------+
Парольную фразу не указываем, нажимаем Enter.
- -t dsa – тип ключа. Есть rsa и dsa. Dsa это для второй версии ssh, которая сейчас везде по умолчанию. Rsa – первая версия ssh.
- -b 1024 длина ключа
- -f /home/user/.ssh/id_dsa – каталог где будет сохранен ключ id_dsa и его публичный ключ id_dsa.pub
Получаем два файла id_dsa и id_dsa.pub. PUB ключ – это публичный, а id_dsa секретный. Переносим файл id_dsa.pub на сервер, куда мы будем подключаться в директорию /home/user/.ssh/ того пользователя под которым мы будем соединяться по ssh.
Теперь надо изменить конфигурацию ssh сервера (файл /etc/ssh/sshd_config) той машины куда мы перенесли публичный ключ. Раскомментируем строки по которым мы разрешим использовать ключи, запретим логиниться по ssh пользователю root.
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PermitRootLogin no
Обязательно после изменения конфига ssh перезапускаем сервер ssh. Для linux и freebsd можно использовать команду
#killall -HUP /usr/sbin/sshd
Возвращаемся к нашему публичному ключу. Переименовываем ключ id_dsa.pub в файл authorized_keys, назначаем файлу правами 600 и оставляем файл в папке /home/user/.ssh.
Пробуем соединиться с нашей машины
mik@m1k:~# ssh -i /home/user/.ssh/id_dsa user@192.168.0.1
The authenticity of host '[192.168.0.1]:22 ([192.168.0.1]:22)'
can't be established.
RSA key fingerprint is be:68:fe:64:bb:62:d6:d8:a9:62:3e:76:17:85:76:94.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[192.168.0.1]:22,[192.168.0.1]:22'
(RSA) to the list of known hosts.
Last login: Thu Jul 29 11:12:22 2010 from mik.localhost
Linux 2.6.29.6-gw-smp.
mik@gw:~$
Первый раз спросит подтверждение на соединение. После ответа yes мы должны попасть на удаленную машины безо всякого пароля.
Кстати, в вышепреведенном случае местоположение нашего секретного ключа “-i /home/user/.ssh/id_dsa” можем не указывать. Я специально назвал его id_dsa, что является названием по умолчанию. При указании другого файла, например для соединения со второй машиной по ключу, получится что название по умолчанию id_dsa уже занято. Так что будьте готовы что для конкретного соединения надо будет указывать свой ключ.
Если в конфиге sshd_config на удаленной машине, где мы уже правили конфиг, выставить
UsePAM no
Тогда уже, кроме как по ключу, попасть на эту машину и не сможем.
Наверное вы уже поняли, что если при создании ключа набрать парольную фразу, тогда при соединении с машиной от вас будет требоваться парольная фраза. Остальные действия с ключами аналогичные.
И теперь помните, если хотите заходить на сервер с разных компьютеров, то на каждый компьютер надо переносить id_dsa секретный ключ. Я бы рекомендовал носить его на флешке, а флешку не терять 😉
Спасибо, наконец-то вкурил как использовать этот метод
Уже ходил по паролю и уже было “подтверждение на соединение”, после прописывания ключей пароль все еще спрашивается, в чем может быть проблема?
проверьте права на каталог .ssh в домашней директории, а также на права на файл known_hosts в этом каталоге. Права должны быть 600, а владелец от кого мы запускаем ssh соединение.
Также помните, если попробовать соединиться по ssh от другого пользователя, то придется заново вносить подтверждение на соединение.
Спасибо за статью.
Я настраивал rsync для создании копии сайта. С rsync разобрался быстро и легко. Но вот как запускать его через cron, чтобы он не спрашивал пароль, мучился два дня, пока не встретил Вашу статью.
Всё получилось!
Единственно, я давал права 700, а не 600 на дерикторию .ssh и другие файлы. С 600 где-то ругалось.
На каталог надо оставлять права на выполнение, иначе он просто открываться не будет. Поэтому и ругалось. А на сами ключи уже нужно ставить 600.
Вот я тоже долго разбирался что-то с ssh. Никогда раньше не пользовался этим протоколом, обходился ftp доступом. В поисках набрел сюда. Спасибо помогло!
Может автор подскажет как дать доступ по ключу нескольким пользователям ?
не совсем понятно про нескольких пользователей. Для каждого пользователя делаем одинаковые операции и генерим новые ключи.
Если забить на безопасность, то можно размножить один секретный ключ по каждому из клиентов, и в каталог каждого из пользователей на сервере положить один и тот же публичный ключ.
Огромное спасибо Вам за статью!
Все получилось,пришлось конечно побибикаться с правами. Но итоге все робит. Проблема бекапов почти решена. Осталось только все в cron занести. Добра Вам!
-f /home/user/.ssh/id_dsa – каталог где будет сохранен ключ id_dsa и его публичный ключ id_dsa.pub
вот это меня столкнуло с правильного пути…
Стоит исправить, а в целом огромное спасибо за помощь
в статье все правильно. только в пути каталога вместо user своего пользователя прописать