Как не набирать часто пароль?
Проблема:
Есть локальный хост А, есть удаленный хост Б. Доступ от А к Б осуществляется по протоколу SSH. В ходе работы на А требуется многократный набор пароля для выполнения команд на Б. Беcпарольный вход на Б с А настраивать не следует, поскольку к login'у на А, из под которого выполняются работы, имеют доступ нежелательные элементы, которых мы не хотим видеть на Б.
Решение:
Воспользуемся ssh-agent'ом и ssh-add'ом. ssh-agent осуществляет прозрачный (беспарольный) доступ запущенного из под него приложения (/bin/bash) к удаленному хосту. Для этого необходимо с помощью ssh-add сообщить ssh-agent'у приватный ключ соединения. После этого у нас появится возможность без введения пароля заходить на хосты, которые имеют соответствующий публичный ключ.
Иными словами, ssh-agent начинает служить менеджером приватных ключей для своих приложений-потомков, избавляя их от необходимости знать, что это такое.
Придется оговорится: пароль вводить придется, но только при регистрации ключа один раз. Этот пароль, заданный при генерации ключей, как раз и защищает приватный ключ от других пользователей зашедших под тем же логином.
Проще говоря:
На хосте А:
- bash% cd ~/.ssh
- bash% ssh-keygen -t rsa - генерируем пару ключей.
- В ходе процесса создания ключей задаем имена файлов на выходе id_rsa.ex и id_rsa.ex.pub, чтоб файлы с именами поумолчанию (id_rsa и id_rsa.pub) не затерли одноименные уже существующие,
- там же зададим пароль на ключи.
- scp id_rsa.ex.pub user@hostb:~/.ssh - копируем ключ c хоста А на Б.
На хосте Б:
- bash% cd ~/.ssh
- cat id_rsa.cvs.pub >> authorized_keys2
Далее на А:
- Выполняем: bash% ssh-agent /bin/bash - ssh-agent запускает своим клиентом шелл.
- Выполняем в этом же шелле: bash% ssh-add ./id_rsa.ex.
У нас спрашивают пароль, который мы задали при генерации id_rsa.ex. Вводим этот пароль и далее имеем из этого шелла беспарольный вход на все машины, куда мы поместили публичный ключ id_rsa.ex.pub.
- При окончании работы не забываем сделать: bash% ssh-agent -t (убиваем ssh-agent'а), чтоб злоумышленник не пробрался.
[Top]
Как про него вообще забыть?
Проблема:
Есть хост А, с которого мы часто обращаемся по SSH на Б. Нам лень вводить пароль. К логину на А имеем доступ только мы.
Как бы сделать так, чтобы пароль вообще не вводить, работая с SSH.
Решение:
Тут вообще все просто!!! Забываем про всяких агентов, описанных выше, на все предложения ввести пароль жмем ентер. Получается:
На хосте А:
- bash% cd ~/.ssh
- bash% ssh-keygen -t rsa - генерируем пару ключей.
- На вопрос задать имя файла жмем ентер - остается имя по умолчанию id_rsa.
- На просьбу задать пароль говорим ентер. В итоге получаем два файла: id_rsa - приватный ключ, id_rsa.pub - публичный ключ.
- scp id_rsa.pub user@hostb:~/.ssh - копируем публичный ключ c хоста А на Б.
На хосте Б:
- bash% cd ~/.ssh
- cat id_rsa.cvs.pub >> authorized_keys2
Теперь с хоста А на хост Б можно ходить вообще без пароля, да и на другие хосты, с которыми мы проделали манипуляции те же что и на хосте Б! Одно плохо - можно забыть пароль. :-) И еще: злоумышленник, зашедший под Вашим логином на хост А, тут же получает доступ к хосту Б.
[Top]