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


152

Я використовую git bash. Я маю користуватися

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

кожного разу, коли я починаю новий git bash.

Чи є спосіб встановити ssh-агент постійно? Або у Windows є хороший спосіб керування ключами ssh?

Я новий хлопець, будь ласка, дайте мені детальний підручник, дякую!


3
це /my/ssh/location/equalivent до чого - щось на зразок /c/Users/Foobar/.ssh/?
Нік

Аналогічна проблема була розміщена на сайті superuser.com/q/1238486/478378, яка зараз вирішена. Наступний зміст містить усі подробиці gist.github.com/jiggneshhgohel/afe96f0d57bdbf8beba305a73905402d . Дякую.
Jignesh Gohel

Відповіді:


138

У мерзотник Баш сесії, ви можете додати сценарій ~/.profileабо ~/.bashrc( з ~будучи зазвичай встановлюється%USERPROFILE% ), для того , щоб згаданої сесії запуску автоматично ssh-agent. Якщо файл не існує, просто створіть його.

Про це GitHub описує у " Роботі з ключовими фразовими фразами SSH ".

У розділі " Автозапуск ssh-агента в Git для 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, перш за все, яка є більш надійною та актуальною.


Одне невелике роздратування, яке було в мене, якщо я знаю, що не буду використовувати git, я б не входив у пропускну фразу ключа ssh, то кожна оболонка, яку я відкрив, знову вимагала. Це стан 1, ключ, що працює без ключа, так що ви можете видалити ssh-add з цього розділу, тоді, якщо ви вперше не введете свою парольну фразу, вас більше не запитають, поки ви не запустите ssh-add вручну.
Andy2K11

@Gordon Яка частина цієї help.github.com/articles/working-with-ssh-key-passphrases посилання GitHub змінилася? Його зміст все ще існує, і все ще здається актуальним для цієї відповіді.
VonC

1
@ Andy2K11 Якщо ви хочете ввести парольну фразу в перший раз, коли вам це потрібно, а не під час відкриття оболонки, найчистішим для мене способом є видалення ssh-add з .bash_profile, як ви вже згадували, і додавання "AddKeysToAgent так" до ваш .ssh / config файл (див. цю відповідь: superuser.com/a/1114257/523133 ). Таким чином, вам навіть не потрібно запам’ятовувати запуск ssh-add.
хардсетінг

30

PS: Ці вказівки містяться в контексті оболонки 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 Host або іншого хоста, як налаштовано у конфігураційному файлі SSH, і він повинен працювати без необхідності зайвих кроки.

Примітка:

Дякую.


1
Цікава альтернатива, використання WSL. +1
VonC

@JigneshGohel Дякую, цей сценарій ідеально підходить, тому що чистий! Я просто цікавився, хоча це ти маєш >> "${SSH_ENV}"? Чи не повинно бути просто так > "${SSH_ENV}"? Ваша робота, звичайно, але це просто закінчується повільно довшим і довшим ~/.ssh/environmentфайлом, оскільки (як я думаю зараз?) Без причин ... Багато, велике спасибі, хоча! Я вважаю, що цей сценарій повинен бути просто включений до замовчування .bashrcдля WSL Ubuntu, це так корисно!
MikeBeaton

5

Я знайшов найпростіший спосіб досягти цього - використання Pageant як агента SSH та планки.

Потрібно налаштувати сеанс шпаклівки для імені хоста, яке використовується у пульті дистанційного керування.

Вам також знадобиться plink.exe, який можна завантажити з того самого сайту, що і шпаклівка.

І вам потрібно Pageant працювати з завантаженим ключем. У моїй папці запуску є ярлик до виступу, який завантажує мій ключ SSH під час входу.

Встановлюючи git-scm, ви можете вказати його для використання черепахи / планки, а не OpenSSH.

Чистий ефект полягає в тому, що ви можете відкривати git-bash коли завгодно і натискати / тягнути, не ставлячи перед собою виклик паролів.

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


2

Оскільки мені не подобається використовувати шпаклівку в Windows як вирішення, я створив дуже просту утиліту ssh-agent-wrapper . Він сканує ваші .ssh папки та додає до агента всі ваші ключі. Вам просто потрібно помістити його в папку запуску Windows, щоб він працював.

Припущення :

  • ssh-агент у шляху
  • shh-add у шляху (обидва, вибравши варіант "RED" при установці git
  • приватні ключі знаходяться у папці ssh% USERPROFILE% /
  • Імена приватних ключів починаються з id (наприклад, id_rsa)

Приємно! +1. Я завжди працюю з opensh (не шпаклівкою), тому це цікаве рішення для приватних ключів із паролями.
VonC

Як ви вже знаходитесь у github, то чому б не просто зробити джерело сховищем git?
Thorbjørn Ravn Andersen

Просто видаліть / випуски зі шляху. ;-)
Ерез А. Корн

1

Я не міг змусити це працювати на основі найкращої відповіді, ймовірно, тому, що я такий персональний комп'ютер і пропускаю щось очевидне. Але тільки FYI, якщо це допомагає комусь із таких проблем, як я, те, що НАРЕШТУВАНО працювало, було через одне із посилань тут (на яке йдеться у відповідях). Це стосувалося просто вставлення мого .bash_profile:

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

У мене, мабуть, щось було налаштовано дивно, але не вдалося, коли я додав його до свого .profileабо .bashrc. Інша реальна проблема, з якою я стикався, це те, що я не адміністратор на цьому комп’ютері і не можу змінити змінні середовища, не отримавши схвалення ІТ, тому це рішення для тих, хто не може отримати доступ до цього.

Ви знаєте, що це працює, якщо під час відкриття git bash буде запропоновано пароль для ssh. Алілуя щось нарешті спрацював.


1

Помістіть це у свій ~ / .bashrc (або у файл, який із нього джерело), ​​що не дозволить йому запускатись кілька разів без потреби в оболонці:

if [ -z "$SSH_AGENT_PID" ]; then
        eval `ssh-agent -s`
fi

А потім додайте "AddKeysToAgent так" до ~ / .ssh / config:

Host *
    AddKeysToAgent yes

ssh на ваш сервер (або git pull) звичайно, і вам буде запропоновано пароль / парольну фразу лише один раз на сеанс.


0

Створіть у файлі ~ новий файл .bashrc .

Там ви можете помістити свої команди, які потрібно виконувати кожного разу, коли ви запускаєте баш


Це має працювати. Спробуйте помістити щось подібне до такого .bashrcфайлу (наприклад, echo testі перевірте, чи завантажено він під час виконання Git Bash.
David Ferenczy Rogožan

Також зауважте, що ~ в PowerShell, ймовірно, відрізняється від ~ у Git Bash / Cygwin залежно від того, яка версія була встановлена ​​та вказані параметри користувача.
dragon788

@Yar У Windows, .bashrcвведіть у свою папку користувача, наприклад C:\Users\john.
Мартін ван Дріел

0

Просте дворядкове рішення з цієї відповіді :

Для ш , баш тощо:

# ~/.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`
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.