Наверное, многие из читающих «Linux для всех» пользуются SSH. Я, например, администрирую большое количество UNIX-систем, и, чтобы быстро получить доступ к нужной машине, приходится использовать возможности протокола на уровне, отличном от примитивного.
Во-первых, надо отучить себя набирать пароль каждый раз. Скорее всего, многие в курсе, но на всякий случай: есть хитрая система т.н. SSH-ключей. Инструкция:
1. ssh-keygen -t dsa — тут надо будет уточнить пути к файлам и passphrase. Второе рекомендуется в целях безопасности, вводить часто не придется. У вас появятся два файла: ~/.ssh/id_dsa и ~/.ssh/id_dsa.pub. Первый из них — ваш секретный ключ, никому его не показывайте! Второй — публичный, который полагается класть на удаленные машины.
2. На удаленной машине создайте папку ~/.ssh с правами 700, а в ней файл authorized_keys с правами 600, в который поместите содержимое файла ~/.ssh/id_dsa.pub (ваш публичный ключ).
3. Можно заходить с первой машины на вторую без пароля. Если не получается — проверьте, нет ли в конфиге sshd удаленной машины строки «PubkeyAuthentication no», а также права на все используемые файлы: на .ssh нужны права 700, на все, что в ней — 600.
Во-вторых, изучаем ssh-agent. Он позволяет вводить Passphrase к ключу только один раз (при подгрузке ключа), а не при каждом логине. Плюс еще некоторые бонусы.
1. Удостоверяемся, что запущен ssh-agent: «ps -C ssh-agent». Если нет — запустите через него терминал, например «ssh-agent roxterm»
2. Подгружаем ключ. «ssh-add ~/.ssh/id_dsa», должно ответить, что ключ добавлен. Note: здесть имя файла необходимо указывать, только если оно отличается от дефолтного.
3. Заходим на вторую машину без пароля.
3.9. Говорят, что на OpenBSD надо выставить переменную указывающую на SSH_AUTH_SOCK (что бы это ни значило :) ), иначе агент-форвардинг не работает.
4. Уходим со второй машины и заходим обратно, отдав параметр -A команде ssh. После этого без пароля заходим на третью машину, на которой уже настроена авторизация по ключам. Думаем «ЫЫЫ, прикольно!», ибо на второй-то машине приватных ключей нет!
В-третьих, забываем про флаг -A, поскольку в файле ~/.ssh/config (права 600) пишем строку «ForwardAgent yes»
Если все ваши похождения по SSH заканчиваются на машинах, досягаемых в один прыжок, дальше можно не читать. Для случаев, когда имеется точка входа в сеть администрируемых машин (или даже цепочка из них), рекомендую дочитать.
В-четвертых, настраиваем ssh-proxy.
Ситуация: У меня есть сервер alpha, имеющий адрес alpha.pupkin.net, а также сервер beta с адресом 192.168.1.17, находящийся в сети, доступной с alpha, но недоступной с моей тачки. Причем на локальной машине мой юзер называется david, а на всех остальных — v.pupkin. Я пишу в ~/.ssh/config следующую уличную магию:
Что происходит: Я дал алиасы машинам alpha и beta, хожу на alpha под правильным юзером по правильному адресу, написав в консоли всего лишь «ssh alpha». Кроме того, набрав на локальной тачке «ssh beta», я попадаю на beta через alpha, для этого в качестве proxy я использую netcat.
Бонус: если на beta доступна сеть с поднятым DNS, в котором есть домен .pup, я автоматически хожу на тачки в этом домене через beta.
UPD: Перенес в «Linux для всех»
Во-первых, надо отучить себя набирать пароль каждый раз. Скорее всего, многие в курсе, но на всякий случай: есть хитрая система т.н. SSH-ключей. Инструкция:
1. ssh-keygen -t dsa — тут надо будет уточнить пути к файлам и passphrase. Второе рекомендуется в целях безопасности, вводить часто не придется. У вас появятся два файла: ~/.ssh/id_dsa и ~/.ssh/id_dsa.pub. Первый из них — ваш секретный ключ, никому его не показывайте! Второй — публичный, который полагается класть на удаленные машины.
2. На удаленной машине создайте папку ~/.ssh с правами 700, а в ней файл authorized_keys с правами 600, в который поместите содержимое файла ~/.ssh/id_dsa.pub (ваш публичный ключ).
3. Можно заходить с первой машины на вторую без пароля. Если не получается — проверьте, нет ли в конфиге sshd удаленной машины строки «PubkeyAuthentication no», а также права на все используемые файлы: на .ssh нужны права 700, на все, что в ней — 600.
Во-вторых, изучаем ssh-agent. Он позволяет вводить Passphrase к ключу только один раз (при подгрузке ключа), а не при каждом логине. Плюс еще некоторые бонусы.
1. Удостоверяемся, что запущен ssh-agent: «ps -C ssh-agent». Если нет — запустите через него терминал, например «ssh-agent roxterm»
2. Подгружаем ключ. «ssh-add ~/.ssh/id_dsa», должно ответить, что ключ добавлен. Note: здесть имя файла необходимо указывать, только если оно отличается от дефолтного.
3. Заходим на вторую машину без пароля.
3.9. Говорят, что на OpenBSD надо выставить переменную указывающую на SSH_AUTH_SOCK (что бы это ни значило :) ), иначе агент-форвардинг не работает.
4. Уходим со второй машины и заходим обратно, отдав параметр -A команде ssh. После этого без пароля заходим на третью машину, на которой уже настроена авторизация по ключам. Думаем «ЫЫЫ, прикольно!», ибо на второй-то машине приватных ключей нет!
В-третьих, забываем про флаг -A, поскольку в файле ~/.ssh/config (права 600) пишем строку «ForwardAgent yes»
Если все ваши похождения по SSH заканчиваются на машинах, досягаемых в один прыжок, дальше можно не читать. Для случаев, когда имеется точка входа в сеть администрируемых машин (или даже цепочка из них), рекомендую дочитать.
В-четвертых, настраиваем ssh-proxy.
Ситуация: У меня есть сервер alpha, имеющий адрес alpha.pupkin.net, а также сервер beta с адресом 192.168.1.17, находящийся в сети, доступной с alpha, но недоступной с моей тачки. Причем на локальной машине мой юзер называется david, а на всех остальных — v.pupkin. Я пишу в ~/.ssh/config следующую уличную магию:
Host *
ForwardAgent yes
Host alpha
HostName alpha.pupkin.net
User v.pupkin
Host beta
HostName 192.168.1.17
User v.pupkin
ProxyCommand ssh alpha nc %h %p
Host *.pup
User v.pupkin
ProxyCommand ssh beta nc %h %p
Что происходит: Я дал алиасы машинам alpha и beta, хожу на alpha под правильным юзером по правильному адресу, написав в консоли всего лишь «ssh alpha». Кроме того, набрав на локальной тачке «ssh beta», я попадаю на beta через alpha, для этого в качестве proxy я использую netcat.
Бонус: если на beta доступна сеть с поднятым DNS, в котором есть домен .pup, я автоматически хожу на тачки в этом домене через beta.
UPD: Перенес в «Linux для всех»