2016-04-19 12 views
0

これは重複した質問であるかどうかはわかりませんが、私の問題の解決策は実際には見つかりません。SSH for Bash Script(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 "ssh-add〜/ .ssh/my_bitbucket_key; $ @ ";}' – tripleee

答えて

2

スクリプトの問題は、bashの新しいインスタンスを実行しているssh-agentを開始していることです。あなたのコマンドを実行しているBashには、このエージェントへのアクセス権がありません。代わりに、あなたは

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

をしたい( eval後にドル記号がエスケープされていないドル記号が sshコマンドを開始する前にローカルシェルによって評価されますので、エスケープする必要があります。)

+0

ありがとうございました。 – aldesabido