У меня есть сайт в качестве удаленного репозитория Git, извлекаемого из Bitbucket.com с использованием псевдонима SSH. Я могу вручную запустить ssh-agent на моем сервере, но я должен делать это каждый раз, когда я вхожу через SSH.
Я вручную запускаю ssh-agent:
eval ssh-agent $SHELL
Затем я добавляю агента:
ssh-add ~/.ssh/bitbucket_id
Тогда это появляется, когда я делаю:
ssh-add -l
И мне хорошо идти. Есть ли способ автоматизировать этот процесс, чтобы мне не приходилось делать это каждый раз, когда я вхожу в систему? Сервер работает RedHat 6.2 (Сантьяго).
ssh-agent <command>
выполняется<command>
как подпроцессssh-agent
, поэтому вы запускаете новую оболочку. Я думаю, что вы хотитеeval ssh-agent
..bash_profile
специфичен для bash,.profile
универсален для всех оболочек POSIX.bash
будет искать сначала.bash_profile
, затем по умолчанию.profile
.ssh-agent
для «стандартного» (POSIX-совместимой) оболочкиeval $(ssh-agent -s)
. Отметим также , что вы должны убедиться , что вы правильно избавиться от агента при входе в систему, так что это также желательно , чтобы положитьtrap 'kill $SSH_AGENT_PID' EXIT
в вашем.profile
после строки , которая запускает агент.Ответы:
Пожалуйста, просмотрите эту статью. Вы можете найти это очень полезным:
http://mah.everybody.org/docs/ssh
На случай, если однажды приведенная ссылка исчезнет однажды, я перехватываю основную часть решения ниже:
источник
.bash_profile
используяsource ~/.bash_profile
в вашей текущей сессии оболочки. Перезагрузка машины также будет работать, потому что это все равно загрузит новый конфиг.SSH_ENV="$HOME/.ssh/env"
(то есть просто нет / среда) Почему? sshd использует ~ / .ssh / environment (см. справочную страницу: PermitUserEnvironment). Github также рекомендует это в своем решении - help.github.com/articles/…ssh-agent
запуска в .bashrc приведет к тому, чтоscp
команда не будет работать.В Arch Linux следующие функции работают очень хорошо (должны работать на всех системных дистрибутивах):
Создайте службу пользователя systemd, добавив следующее
~/.config/systemd/user/ssh-agent.service
:Настройте оболочку, чтобы иметь переменную окружения для socket (
.bash_profile, .zshrc, ...
):Включите сервис, чтобы он автоматически запускался при входе в систему и запускал его:
Добавьте следующий параметр конфигурации в локальный файл конфигурации ssh
~/.ssh/config
(это работает с SSH 7.2):Это заставит клиента ssh всегда добавлять ключ к работающему агенту, поэтому нет необходимости предварительно добавлять его в ssh.
источник
ssh-agent
процесса. Возможно, мне не хватает знаний даже после прочтения документации.SSH_AGENT_PID
переменную среды, хотя :(Старый вопрос, но я сталкивался с подобной ситуацией. Не думайте, что приведенный выше ответ полностью достигает того, что необходимо. Недостающий кусок есть
keychain
; установите его, если это еще не сделано.Затем добавьте следующую строку в ваш
~/.bashrc
Это запустит,
ssh-agent
если он не запущен, подключится к нему, если он есть, загрузитssh-agent
переменные окружения в вашу оболочку и загрузит ваш ключ ssh.Перейдите
id_rsa
на тот закрытый ключ, который~/.ssh
вы хотите загрузить.Ссылка
/unix/90853/how-can-i-run-ssh-add-automatically-without-password-prompt
источник
keychain --eval id_[yourid file]
в .bashrceval `keychain --eval id_[yourid file]`
это.bashrc
. Обратные пометки необходимы для оценки переменных среды в текущей оболочке для доступа к запущенному ssh-agent.-q
опцию для тихого режима. Больше информации о связке ключей: funtoo.org/KeychainПринятое решение имеет следующие недостатки:
Если ваши ключи не требуют ввода пароля, я предлагаю следующее решение. Добавьте следующее до
.bash_profile
самого конца (отредактируйте список ключей в соответствии с вашими потребностями):У него есть следующие преимущества:
У него есть возможные недостатки:
ssh-add
команда будет влиять только на один сеанс, который на самом деле является проблемой только в очень нетипичных обстоятельствах;Обратите внимание, что некоторые
ssh-agent
процессы не являются недостатком, поскольку они не занимают больше памяти или процессорного времени.источник
Добавьте это к своему
~/.bashrc
, затем выйдите из системы и вернитесь, чтобы вступить в силу.Это должно запрашивать пароль только при первом входе в систему после каждой перезагрузки. Он будет продолжать использовать то же самое,
ssh-agent
пока он работает.источник
~/.ssh/id_rsa
? Кажется, чтоssh-add
часть вашего ответа ожидает имена файлов по умолчанию для ключей.Поэтому я использовал подходы, описанные выше, но я предпочитаю, чтобы агент умер, когда мой последний сеанс bash заканчивается. Это немного дольше, чем другие решения, но это мой предпочтительный подход. Основная идея заключается в том, что первый сеанс bash запускает ssh-agent. Затем каждый дополнительный сеанс bash проверяет файл конфигурации (
~/.ssh/.agent_env
). Если это так, и сеанс выполняется, создайте исходную среду и создайте жесткую ссылку на файл сокета/tmp
(должен быть в той же файловой системе, что и исходный файл сокета). Когда сеансы bash закрываются, каждый удаляет свою жесткую ссылку. Последний закрывающий сеанс обнаружит, что жесткие ссылки имеют 2 ссылки (жесткую и исходную), удаление собственного сокета процессов и уничтожение процесса приведет к 0, оставляя чистую среду после закрытия последнего сеанса bash.источник
Просто чтобы добавить еще одно решение: P, я пошел с комбинацией решений @spheenik и @ collin-anderson.
Может быть немного более элегантно, но это просто и читабельно. Это решение:
AddKeysToAgent yes
что в вашей конфигурации SSH так ключи будут автоматически добавляться при использованииКомментарии приветствуются :)
источник
AddKeysToAgent yes
обстановке. Спасибо.Я решил это, добавив это в / etc / profile - для всей системы (или для локального пользователя .profile , или _.bash_profile_):
Это запускает новый ssh-agent, если он не запущен для текущего пользователя, или переустанавливает параметр env ssh-agent, если работает.
источник
if pgrep -u $WHOAMI $SERVICE >/dev/null
работает?Пользователи оболочки рыбы могут использовать этот скрипт, чтобы сделать то же самое.
источник
Я использую инструмент SSH для этого.
С его man- страницы:
источник
Пробовал пару решений из многих источников, но все казалось слишком большим количеством проблем. Наконец я нашел самый простой :)
Если вы еще не знакомы с zsh и oh-my-zsh, установите его. Тебе понравится это :)
Затем редактировать
.zshrc
найдите
plugins
раздел и обновите его, чтобы использоватьssh-agent
так:И это все! Вы будете
ssh-agent
работать и работать каждый раз, когда вы запускаете свою оболочкуисточник
Мне очень нравятся ваши ответы. Это сделало работу с
cygwin / linux
хозяевами намного проще. Я объединил функции начала и окончания, чтобы сделать его безопасным.источник