2017-10-09 13 views
0

Ich folgte gitlab Dokumentation auf , um die Verbindung zu meinem Remote-Server einzurichten, die wie erwartet funktioniert.Gitlab CI - Setup SSH Schlüssel in Bash

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' 

Allerdings würde Ich mag diese Befehle in einem separaten Skript wie folgt setzen:

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 

Wenn auf der Fernbedienung zu verbinden versuchen, Server gibt es den folgenden Fehler:

$ 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). 

Das Skript wurde korrekt ausgeführt und hat dieselben Protokolle wie bei der vorherigen Methode ausgegeben. Irgendwelche Ideen?

+0

Ich vermute, es ist mit der Tatsache zu tun, sind Sie in einer Subshell des zweite Weg laufen. Nachdem das Skript beendet wurde, wird es wahrscheinlich auch von ssh-agent ausgeführt. – IBam

Antwort

1

Verwenden Sie bei der Ausführung von ssh-add entweder source oder. Damit das Skript in derselben Shell ausgeführt wird, hat der ssh-agent in der aktuellen Shell nicht den neuen Schlüssel. Also würden Sie in Ihrem Fall folgendes tun.

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

oder

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

Angepasst Antwort aus einer ähnlichen Frage, die schlecht formuliert wurde. Here ist das Original.

HINWEIS: Es gibt keine Notwendigkeit für bash, weil Sie bereits #!/bin/bash in Ihrem Skript

verwenden