Здесь показаны различия между двумя версиями данной страницы.
— |
как_заходить_по_ssh_без_паролей [2009/12/19 15:52] (текущий) dik создано |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | Чтобы заходить на таблетку, на которой установлен сервер ssh, без ввода пароля, требуется сгенерировать ключевую пару (публичная и секретная части). Публичная часть затем передаётся на таблетку (можно также на все удалённые компьютеры, на которые Вы намереваетесь заходить с этим ключом). | ||
+ | |||
+ | |||
+ | |||
+ | Сохраните следующий скрипт с именем mk-ssh-key, установите права и выполните на компьютере: | ||
+ | |||
+ | #!/bin/sh | ||
+ | |||
+ | KEY="dsa" | ||
+ | |||
+ | ===== # Генерация ключа ===== | ||
+ | |||
+ | chmod go-w ~/ || exit 1 | ||
+ | ssh-keygen -q -f ~/.ssh/id_$KEY -t $KEY || exit 1 | ||
+ | chmod 700 ~/.ssh || exit 1 | ||
+ | chmod go-rwx ~/.ssh/* || exit 1 | ||
+ | |||
+ | Команда ssh-keygen спросит пароль для защиты создаваемого ключа (а не для логина). Крайне не рекомендуется оставлять его пустым, иначе кто-нибудь может просто скопировать ключ, имея физический доступ к компьютеру. Вводите пароль не менее 16 символов, включая пробелы, цифры, знаки, прописные и строчные буквы. На компьютере в дальнейшем этот пароль будет запрашиваться при первом применении ключа, в графическом диалоге, и сохраняться на всю сессию. | ||
+ | |||
+ | Генерация ключей занимает некоторое время. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | Сохраните следующий скрипт с именем send-ssh-key, установите права и выполните на компьютере: | ||
+ | |||
+ | #!/bin/sh | ||
+ | |||
+ | DEST=$1 | ||
+ | KEY="dsa" | ||
+ | |||
+ | # Дистрибуция публичной части ключа | ||
+ | |||
+ | ssh $DEST "mkdir -p .ssh; chmod 700 .ssh" || exit 1 | ||
+ | ssh-copy-id -i ~/.ssh/id_$KEY.pub $DEST || exit 1 | ||
+ | |||
+ | командой: | ||
+ | |||
+ | send-ssh-key ЮЗЕР@АДРЕС | ||
+ | |||
+ | Вместо ЮЗЕР надо вводить свой логин на том компьютере, куда Вы будете заходить (на таблетке - user), а не том, на котором Вы выполняете скрипты (т.е. на сервере ssh, а не клиенте). | ||
+ | |||
+ | При выполнении команд ssh и ssh-copy-id придётся для каждой ввести пароль для логина на удалённом компьютере. | ||
+ | |||
+ | Скрипт send-ssh-key надо выполнять для каждого удалённого компьютера (включая таблетку), на который собираетесь заходить по ssh. | ||
+ | |||
+ | |||
+ | |||
+ | Добавьте следующий код ([[http://www.internettablettalk.com/forums/showpost.php?p=172945&postcount=3|[1]]] автор z2n) в конец файла /etc/profile ТОЛЬКО НА ТАБЛЕТКЕ (для этого требуются соответствующие права доступа): | ||
+ | |||
+ | # Find an ssh-agent socket, or start a new ssh-agent | ||
+ | if test -z "$SSH_AUTH_SOCK" && test -x /usr/bin/ssh-agent; then | ||
+ | sock=`netstat -l 2>/dev/null|grep ssh-|cut -c 58-|head -n 1` | ||
+ | if test -n "$sock"; then | ||
+ | export SSH_AUTH_SOCK=$sock | ||
+ | else | ||
+ | eval `ssh-agent` | ||
+ | fi | ||
+ | fi | ||
+ | |||
+ | Как вариант можно сохранить его в отдельный файл в удобном месте, а в /etc/profile вставить строку | ||
+ | source /ПУТЬ/ИМЯ | ||
+ | |||
+ | Этот код нужен на таблетке потому, что там нет программы ssh-askpass, которая при первом применении ключа спрашивает пароль в графическом диалоге и передаёт его в ssh-agent. Агент нужно правильно запустить (чтобы экспортировались переменные), и следить, чтобы не плодились его экземпляры. Вот этим код и занимается. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | Теперь Вы можете заходить на таблетку командой ssh user@АДРЕС. | ||
+ | |||
+ | Сохраняйте эти файлы, чтобы они пережили перепрошивку таблетки, они Вам понадобятся не раз. | ||
+ | |||
+ | Скрипты mk-ssh-key и send-ssh-key можно сохранить и выполнять и на таблетке. Тогда можно будет заходить с таблетки на компьютер. А также (что выходит за рамки этого HOWTO) использовать ssh-соединение для потоковой передачи с программ, которые не умеют вводить пароль, или использовать X-редирект. | ||
+ | |||
+ | Только предварительно дайте на таблетке команду ssh-add, которая спросит пароль, защищающий ключ, и передаст его агенту. Который и закеширует пароль до конца сеанса (до перезагрузки). Опционально можно задать время жизни пароля в памяти. | ||
+ | |||
+ | ssh-add -t 10m | ||
+ | ssh-add -t 1h | ||
+ | ssh-add -t 1h30m | ||
+ | ssh-add -t 1d | ||
+ | ssh-add -t 1w | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | Для желающих разберём детали. | ||
+ | |||
+ | 1) Установка прав доступа из скриптов очень важна, потому, что при слишком широких правах ssh не позволит (без всяких предупреждений) входить без пароля, и будет запрашивать его. Команды ssh создают каталоги и файлы с правильными правами, но если они уже существует, неправильные права могут остаться. Поэтому скрипты устанавливают нужные права директорий и файлов на компьютере и удалённо на таблетке. | ||
+ | |||
+ | 2) Команда ssh-keygen с опцией -t dsa будет генерировать ключ DSA длиной 2048 бит (по умолчанию RSA 4096 бит). | ||
+ | |||
+ | 3) При генерации ключа каждый авторизованный ключ для хоста добавляется в файл ~/.ssh/authorized_keys, одной строкой (в формате тип-ключ-хост). Поэтому при повторной генерации, или если авторизацию какого-то хоста надо прекратить, удаляем соответствующую строку в этом файле. | ||
+ | |||
+ | 4) При авторизации нового хоста в файл ~/.ssh/known_hosts добавляется новая строка. В ней отсутствует имя хоста, что затрудняет идентификацию. mrkooll сообщил: "Если изменился ключ удаленного хоста то новые строчки добавляться не будут, а будет предупреждение о изменении ключа удаленной машины и разрыв соединения. В предупреждении будет указано на основании какой строки из known_hosts оно выдано." | ||
+ | |||
+ | В таком случае нужно удалить указанную строку из этого файла. При следующем подключении придётся лишь ответить согласием на вопрос о незнакомом хосте. | ||
+ | |||
+ | |||
+ | |||
+ | При написании этой статьи не пострадал ни один HOWTO. Была использована документация ssh. | ||
+ | |||
+ | --Dali, 11 июня 2008 - 17 июня 2008, ver 4 |