Инструменты пользователя

Инструменты сайта


как_заходить_по_ssh_без_паролей

Чтобы заходить на таблетку, на которой установлен сервер 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.

Добавьте следующий код ([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

как_заходить_по_ssh_без_паролей.txt · Последние изменения: 2009/12/19 15:52 — dik