2016-04-19 6 views
0

Не уверен, что это дублированный вопрос, но я действительно не могу найти решение моей проблемы.SSH для скрипта Bash (SSH-Agent)

Проблема в том, что я не могу выполнить следующую команду.

#!/bin/bash 
SCRIPT1="cd /path/to/project;" 
SCRIPT2="git pull;" 
ssh "production" ${SCRIPT1} "ssh-agent /bin/bash; ssh-add ~/.ssh/my_bitbucket_key;" ${SCRIPT2} 

Все еще новичок в bash и ssh, поэтому я не уверен, что если это правильный способ сделать это.

Надеюсь, вы можете мне помочь. Благодаря!

+2

ли командную работу для кого-то другого но не для вас, или он никогда не работал ни для кого? Если это просто не работает для вас, какое сообщение об ошибке вы получаете? Если это не сработало ни для кого, я бы поставил обе строки $ SCRIPT1 и $ SCRIPT2 в двойные кавычки команды ssh. – Mort

+0

измените первую строку на '#!/Bin/bash -vx', чтобы увидеть замену переменных, как это происходит в каждом cmd. Я думаю, вы увидите проблему. Не путайте, что все строки теперь одинарны в строках, начинающихся с '+'. Именно так отладчик «нормализует» свои входы. Удачи. – shellter

+0

В стороне, ставя дистанционные команды в переменных, это сомнительная практика. Возможно, вместо этого создайте функцию, которая запускает свой аргумент в удаленной оболочке, например 'prod 'cd/path/to/project; git pull', где' prod' может быть чем-то вроде 'prod() {ssh production ssh-agent bash -c msgstr "ssh-add ~/.ssh/my_bitbucket_key; $ @ ";}' – tripleee

ответ

2

Проблема с вашим скриптом заключается в том, что вы запускаете ssh-agent, запуская новый экземпляр bash. Bash, выполняющий ваши команды, не имеет доступа к этому агенту. Вместо этого, вы хотите

ssh "production" "${SCRIPT1} 
    eval \$(ssh-agent) 
    ssh-add ~/.ssh/my_bitbucket_key 
    ${SCRIPT2}" 

(Знак доллара после того, как eval должен быть экранированы, потому что незаменяемые знаки доллара будут оценены местной оболочки перед запуском команды ssh.)

+0

Большое вам спасибо. Работает как шарм :) – aldesabido

Смежные вопросы