2017-10-09 6 views
0

SSH keys when using the Docker executorでgitlabのドキュメントに従って、リモートサーバへの接続を設定しました。これは期待どおり動作します。Gitlab CI - BashでSSHキーを設定する

before_script: 
    - which ssh-agent || (apt-get update -y && apt-get install openssh-client -y) 
    - eval $(ssh-agent -s) 
    - ssh-add <(echo "$SSH_PRIVATE_KEY") 
    - mkdir -p ~/.ssh 
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' 

しかし、私はこのような別のスクリプトでこれらのコマンドを入れたいのですが:

before_script: 
    - bash ./scripts/ssh-config.sh 

ssh-config.sh

#!/bin/bash 
which ssh-agent || (apt-get update -y && apt-get install openssh-client -y) 
eval $(ssh-agent -s) 
ssh-add <(echo $SSH_PRIVATE_KEY) 
mkdir -p ~/.ssh 
[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config 

リモートに接続しようとしますサーバーでは、次のエラーが発生します。

$ bash scripts/ssh-config.sh 
/usr/bin/ssh-agent 
Agent pid 15 
Identity added: /dev/fd/63 (/dev/fd/63) 
$ ssh [email protected] "touch test" 
Warning: Permanently added 'example.com' (ECDSA) to the list of known hosts.  
Permission denied, please try again. 
Permission denied, please try again. 
Permission denied (publickey,password). 

スクリプトが正しく実行されたように見え、以前の方法と同じログを出力しました。何か案は?

+0

#!/bin/bashを使用しているためbashの必要はありません。スクリプトが終了した後、ssh-agentもおそらく実行します。 – IBam

答えて

1

ssh-addを実行する場合は、sourceまたはを使用します。現在のシェルのssh-agentに新しい鍵がない場合は、同じシェル内でスクリプトが実行されます。あなたの場合、あなたは次のことを行います。悪い言葉で表現された同様の質問から答えを適応

before_script: 
    - . ./scripts/ssh-config.sh 

または

before_script: 
    - source ./scripts/ssh-config.sh 

Hereはオリジナルです。

注:すでにスクリプト、私はそれはあなたがサブシェルで実行しているという事実第二の方法で行うことだ疑い