Как заставить ssh-agent работать во всех терминалах?

27

Я настроил автоматический (без пароля) вход по ssh на некоторые серверы, используя ssh-copy-id. ssh-agentработает только с терминала, где он был запущен. Как мне начать ssh-addработать во всех моих терминалах?

Естественно, я бы не предпочел SSH-ключ без ключевой фразы.

Gowtham
источник

Ответы:

26

Если вы входите в графическую сессию, подготовьтесь к запуску ssh-agentво время ее запуска. Некоторые дистрибутивы уже делают это для вас. Если у вас нет, организуйте запуск ssh-agentиз сценария запуска сеанса или из оконного менеджера. Как это сделать, зависит от среды вашего рабочего стола и вашего оконного менеджера. Например, если вы начинаете ваш оконный менеджер вручную, просто заменить вызов my_favorite_wmна ssh-agent my_favorite_wm.

Не начинайте ssh-agentс .bashrcили .zshrc, так как эти файлы выполняются каждой новой интерактивной оболочкой. Место для начала ssh-agentнаходится в файле запуска сеанса, таком как .profileили .xsession.

Если вы хотите использовать один и тот же агент SSH во всех процессах, независимо от того, откуда вы вошли, вы можете сделать так, чтобы он всегда использовал одно и то же имя сокета, а не сокет с произвольным именем. Например, вы можете поместить это в ваш ~/.profile:

export SSH_AUTH_SOCK=~/.ssh/ssh-agent.$HOSTNAME.sock
ssh-add -l 2>/dev/null >/dev/null
if [ $? -ge 2 ]; then
  ssh-agent -a "$SSH_AUTH_SOCK" >/dev/null
fi
Жиль "ТАК - перестань быть злым"
источник
Кстати, причина, по которой он проверяет, $? -ge 2заключается в том, что код выхода 1 - это когда ssh-agent не имеет ключей, но ssh-agent уже запущен.
wisbucky
7

Возможно, вам нужна такая программа, как Keychain , которая была разработана именно для этой цели. Со страницы руководства:

DESCRIPTION
   keychain is a manager for ssh-agent, typically run from ~/.bash_profile.
   It allows your shells and cron jobs to share a single ssh-agent process.
snapshoe
источник
очень нравится этот!
Колин Д.
Большой! Спасибо. Работает отлично.
Кто-то
это прекрасно работает, после загрузки сжатого файла с Github, убедитесь, что вы добавили полный путь к каталогу несжатого keychain-2.8.5 в ваш ~ / .bash_profile экспорт PATH = $ PATH: строка
Кевин Чжао
4

Примените его к своему рабочему столу или оконному менеджеру. Когда я делал это в прошлом вручную ~/.Xclients, я использовал это как последнюю строку:

ssh-agent mywindowmanger

Там могут быть некоторые DE, которые имеют свои собственные параметры настройки для этого, хотя мне кажется, что (например) KDE нет. В настоящее время кажется, что мой был запущен с помощью кода из /etc/X11/xinit/xinitrc-common(предположительно что-то, сделанного fedora), так как он активен для всех пользователей независимо от DE / WM и родительской команды процесса $HOME/.Xclients, но этот файл не ссылается ssh-agent(тогда как /etc/X11/xinit/xinitrc-commonделает).

Если у вас его нет ~/.Xclients, вы можете создать его, используя только одну строку, но вам нужно знать команду, которая запускает вашу DE / WM.

лютик золотистый
источник