сценарий sh не добавляет ключ ssh в ssh-agent (windows git bash)

Я использую Github для Windows в Windows 7. У меня есть скрипт bash для добавления ssh-ключа в мой ssh-агент. Я настроил удаленное репо ssh.

add_key.sh

#!/bin/bash    
cd ../ssh/
eval $(ssh-agent)
ssh-add id.rsa
cd ../htdocs/

Выполнить команду-

./add_key.sh

Он возвращается

Agent pid 5548
Identity added: id.rsa (id.rsa)

Когда я git push origin master, это не удается. Но когда я вручную перехожу в каталог ssh и запускаю те же команды, связанные с ssh, и возвращаюсь обратно в свой каталог htdocs и git push to origin master, это работает.

Почему это происходит?


person goelakash    schedule 22.04.2015    source источник
comment
Откуда вы запускаете git push? Какой-то другой сеанс оболочки? В этом сеансе оболочки правильно установлены параметры среды ssh-agent?   -  person Etan Reisner    schedule 22.04.2015
comment
Тот же сеанс оболочки. Я не устанавливал никаких параметров env ssh-agent. Я запускаю git push из папки репо (htdocs).   -  person goelakash    schedule 22.04.2015
comment
Вы используете ./source для запуска этого скрипта или используете ./script.sh? Поскольку последнее означает, что ваш git push не может находиться в том же сеансе, что и этот скрипт, работающий в своем собственном сеансе оболочки.   -  person Etan Reisner    schedule 22.04.2015
comment
Я удалил расширение .sh и запустил снова, но это не работает. Так всегда ли исполняемый файл создает отдельный сеанс?   -  person goelakash    schedule 22.04.2015
comment
Расширение не имеет значения. Как вы его запускаете. Запуск скрипта как /path/to/script.sh запускает новую оболочку. Использование . /path/to/script.sh использует текущую оболочку.   -  person Etan Reisner    schedule 22.04.2015
comment
Итак, я выполняю как ./add_key . Это должно быть в той же оболочке. Итак, что же?   -  person goelakash    schedule 22.04.2015
comment
Нет, это /path/to/script.sh. Ваш путь просто оказался ./. Вы хотите . add_key или . ./add_key. Обратите внимание на пространство.   -  person Etan Reisner    schedule 22.04.2015
comment
Большой! Удаление обратной косой черты и вставка пробела сработали.   -  person goelakash    schedule 22.04.2015
comment
Давайте продолжим обсуждение в чате.   -  person goelakash    schedule 22.04.2015


Ответы (1)


Ваша проблема в том, что ваш скрипт работает в своем собственном сеансе оболочки, потому что вы используете ./add_key.sh.

Это означает, что переменные, установленные eval $(ssh-agent), не существуют за пределами этого сеанса оболочки, поэтому родительский сеанс не имеет их и не может использовать агент (также вы можете создавать новый агент каждый раз, когда запускаете скрипт).

Исправление для этого состоит в том, чтобы запустить этот «скрипт» в текущем сеансе, используя точечный источник сценария вместо того, чтобы запускать его как внешний сценарий.

То есть вы хотите использовать . add_key.sh.

person Etan Reisner    schedule 22.04.2015