Debian.pro

Блог для пользователей и администраторов Debian


Гуляем с сервера на сервер с одним ssh-ключом. SSH-agent forwarding.

Век живи, век учись, как говориться.
Частенько сталкиваюсь с такими ситуациями:
1) сижу по ssh на одном сервере, по scp понадобилось что-либо скачать с другого.
2) нужно сделать rsync с одного сервера на другой.
3) нужно выполнять команды на втором сервере из скрипта, запущенного на первом (из консоли, а не крона, само собой)
Естественно, что на оба сервера есть рутовый доступ по ключам.

В таких случаях долгое время я создавал дополнительные ssh ключи, чтобы с одного сервера можно было зайти на другой. Да, глупо, я знаю. Но ведь не все знают про ssh-agent forwarding.

В таких случаях проблема решается одной строчкой в конфиге /etc/ssh/ssh_config на вашей рабочей машинке:
ForwardAgent yes
В секции
Host *

Можно просто написать в ~/.ssh/config
Host *
ForwardAgent yes

Эта опция позволяет ssh-клиенту «пробрасывать» ваш ключ на сервер, на который вы зашли по ключу. Таким образом вы (в одной консоли, само собой) пишете:
user@laptop:~$ ssh root@server1
root@server1:~# ssh root@server2
root@server2:~#

И оказываете на server2, зайдя на него по цепочке laptop->server1->server2, при этом на оба сервера вы зашли по вашему ssh-ключу, который лежит только на лаптопе.
Учтите, что сделать цепочку из трех серверов получится сделать только если на server1 включена опция ForwardAgent. То есть, ключ форвардится только один раз. Если на server1 отключена эта опция — то с него вы сможете перейти только на один сервер. В примере выше — на server2 мы зашли по ключу, но ключ на этот сервер не проброшен, поэтому если мы попытаемся зайти с него на server3 — то у нас спросят пароль. Если же опцию включить на server1 — то ключ пробросится на server2, и мы сможем по ключу пойти с него на server3. А при попытке зайти на server4 по цепочке… ну вы поняли =)


Комментарии (9):

  1. Serj :

    А ssh-add не нужно разве? Я уже не помню точно ибо давно настраивал, но вроде если не добавить ключ его проброс не выполнится.

  2. ssh-add вы делаете до того, как пойти с этим ключом на первый сервер, нне) ?
    На сервере-втором-десятом оно отработает уже само по себе.

    А вообще я пользуюсь гномовским ssh-agent — вполне себе достойная вещь. Она за меня всё делает.

  3. Serj :

    Да, я потом посмотрел свой ноут, ssh-add вообще к priv ключам относится в агенте.

  4. Удобно. Вот только скажите честно — не страшно, что поломают? Я бы лично ну как минимум полностью запретил везде логин под рутом. Даже если поломают хост с ключами, то хотя бы на других хостах рута не получат (придется пароль брутить).

  5. PermitRootLogin without-password
    Разрешает вход руту только по ключам.

    А ключ, само собой, запароленный. На ноуте. На зашифрованной ФС. С запароленным grub и системой.

  6. Ivan :

    Обнаружил такую неприятную вещь — ssh ключ без пароля не форвардится

  7. Да не, должны.
    Хотя я ими уже лет эдак 7 не пользовался так, чтобы мне форвардить их надо было..

  8. alex :

    >PermitRootLogin without-password
    >Разрешает вход руту только по ключам.
    >А ключ, само собой, запароленный. На ноуте. На зашифрованной ФС. С запароленным grub и системой.

    и все это для того чтобы 1 раз не вводить пароль по ssh )))
    P.S. конечно, это иррония

  9. Кому один раз, а у кого:
    inkvizitor68sl@isera:~$ wc -l .ssh/known_hosts
    8605 .ssh/known_hosts

Написать комментарий