Запуск агента SSH при запуске Git Bash в Windows

Я использую git bash. Я должен использовать

eval `ssh-agent.exe`
ssh-add /my/ssh/location/

каждый раз, когда я запускаю новый git bash.

Есть ли способ установить ssh-агент навсегда? Или окна имеют хороший способ для управления ключами ssh?

Я новый парень, пожалуйста, дайте мне подробный учебник, спасибо!

Ответ 1

В сеансе git bash вы можете добавить скрипт в ~/.profile или ~/.bashrc (с ~ обычно устанавливаемым на %USERPROFILE%), чтобы этот сеанс автоматически запускал ssh-agent. Если файл не существует, просто создайте его.

Это то, что описывает GitHub в разделе " Работа с ключевыми фразами SSH ".

В разделе " Автозапуск ssh-agent on Git for Windows " этой статьи есть надежный скрипт, который проверяет, работает ли агент или нет. Ниже приведен только фрагмент, см. Статью GitHub для полного решения.

# This is just a snippet. See the article above.
if ! agent_is_running; then
    agent_start
    ssh-add
elif ! agent_has_keys; then
    ssh-add
fi

Другие источники:

" Получение ssh-агента для работы с git run из командной оболочки Windows " имеет похожий скрипт, но я хотел бы прежде всего упомянуть статью GitHub, которая является более надежной и актуальной.

Ответ 2

P.S: Эти инструкции находятся в контексте оболочки Bash, открытой в подсистеме Windows 10 Linux, и не упоминает о сим-связывании SSH-ключей, сгенерированных в Windows с Bash в Ubuntu в Windows

1) Обновите .bashrc, добавив в него следующее

# Set up ssh-agent
SSH_ENV="$HOME/.ssh/environment"

function start_agent {
    echo "Initializing new SSH agent..."
    touch $SSH_ENV
    chmod 600 "${SSH_ENV}"
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' >> "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
    . "${SSH_ENV}" > /dev/null
    kill -0 $SSH_AGENT_PID 2>/dev/null || {
        start_agent
    }
else
    start_agent
fi

2) Затем запустите $ source ~/.bashrc, чтобы перезагрузить конфигурацию.

Вышеупомянутые шаги были взяты из https://github.com/abergs/ubuntuonwindows#2-start-an-bash-ssh-agent-on-launch

3) Создайте конфигурационный файл SSH, если он отсутствует. Используйте следующую команду для создания нового: .ssh$ touch config

4) Добавьте следующее в ~/.ssh/config

Host github.com-<YOUR_GITHUB_USERNAME> 
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_work_gmail # path to your private key
AddKeysToAgent yes


Host csexperimental.abc.com
IdentityFile ~/.ssh/id_work_gmail # path to your private key
AddKeysToAgent yes

<More hosts and github configs can be added in similar manner mentioned above>

5) Добавьте свой ключ к агенту SSH с помощью команды $ ssh-add ~/.ssh/id_work_gmail, а затем вы сможете подключиться к своей учетной записи github или удаленному хосту с помощью ssh. Напр. в контексте приведенных выше примеров кода:

$ ssh github.com-<YOUR_GITHUB_USERNAME>

или

$ ssh <USER>@csexperimental.abc.com

Это добавление ключа к агенту SSH должно выполняться только один раз.

6) Теперь выйдите из своего сеанса Bash в подсистеме Windows Linux, т.е. снова выйдите из всех консолей Bash и снова запустите новую консоль и попробуйте SSH на свой хост Github или другой хост, настроенный в конфигурационном файле SSH и он должен работать без каких-либо дополнительных шагов.

Примечание:

  • Если вы столкнулись с Bad owner or permissions on ~/.ssh/config, обновите разрешения с помощью команды chmod 600 ~/.ssh/config. Ссылка: https://serverfault.com/a/253314/98910

  • Для выполнения вышеуказанных шагов вам понадобится OpenSSH v 7.2 и более новая. Если у вас есть старший, вы можете обновить его, выполнив шаги, указанные в fooobar.com/questions/32199/...

  • Те же самые детали можно найти в gist Проблемы с SSH-агентом Windows 10 Linux

Спасибо.

Ответ 3

Я нашел самый гладкий способ достичь этого - использовать Pageant как агент SSH и plink.

Вам нужно настроить сеанс шпатлевки для имени хоста, которое используется на вашем пульте дистанционного управления.

Вам также понадобится plink.exe, который можно загрузить с того же сайта, что и putty.

И вам нужно, чтобы страница выполнялась с загруженным ключом. У меня есть ярлык для показа в моей загрузочной папке, загружающей мой SSH-ключ при входе в систему.

Когда вы устанавливаете git -scm, вы можете указать его для использования черепахи /plink, а не OpenSSH.

Чистый эффект заключается в том, что вы можете открыть git - bash, когда захотите, и нажать/вытащить, не подвергая сомнению кодовые фразы.

То же самое относится к сеансам шпатлевки и WinSCP, когда во время загрузки вашего сайта загружен ваш ключ. Это делает жизнь намного проще (и безопасна).

Ответ 4

Как мне не нравится использовать putty в Windows в качестве обходного пути, я создал очень простую утилиту ssh-agent-wrapper. Он сканирует ваши .ssh папки и добавляет все ваши ключи к агенту. Вам просто нужно поместить его в папку автозагрузки Windows, чтобы он работал.

Предположения

  • ssh-agent в пути
  • shh-add in path (как при выборе опции "RED" при установке git
  • личные ключи находятся в папке% USERPROFILE%/. ssh
  • имена закрытых ключей начинаются с id (например, id_rsa)

Ответ 5

Создайте новый . bashrc файл в ~ каталоге.

Там вы можете поместить свои команды, которые вы хотите исполнять, каждый раз, когда вы запускаете bash

Ответ 6

Простое двухстрочное решение из этого ответа:

Для sh, bash и т.д.:

# ~/.profile
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh

Для csh, tcsh и т.д.:

# ~/.schrc
sh -c 'if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -c > ~/.ssh-agent.tcsh; fi'
eval `cat ~/.ssh-agent.tcsh`