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

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


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

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

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