Gitlab CI - Bereitstellung über SSH auf einem Remote-Server

12

Ich habe eine Gitlab-Umgebung mit Gitlab CI, in der ein neues Projekt über die kompilierten Dateien aussagt und über rsync auf einen Produktionsserver kopiert wird.

Der Computer, auf dem diese Ressourcen erstellt werden, ist ein Image von Docker (Knoten 6), aber jetzt muss ich die resultierenden Dateien von diesem Container-Docker-Befehl unter Linux auf den Server kopieren ... Mein Problem ist die Verbindung über ssh through rsync.

Zur Zeit habe ich folgendes:

stages:
  - deploy

before_script:
    - npm i
    - npm run build

job_deploy:
  stage: deploy
  script:
    - ssh-keygen -t rsa -b 4096 -C '' -f ~/.ssh/deploy_rsa
    - ssh-keyscan -H 8.8.8.8 >> ~/.ssh/known_hosts
    - ssh-copy-id -i ~/.ssh/deploy_rsa.pub [email protected]
    - rsync -avuz $CI_PROJECT_DIR/dist/ [email protected]:/var/wwww/example.com
  only:
    - master

Dadurch bekomme ich:

    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    Permission denied, please try again.
    Permission denied, please try again.
    Permission denied (publickey,password).
Rodrigo Moreno
quelle
3
Es ist etwas, was ich hier nicht verstehe: Sie generieren einen neuen SSH-Schlüssel im Handumdrehen, jeder Build ist nicht in Ordnung? Wo ist der Sinn von ssh leys, wenn Sie pwd benötigen, um den Pub-Schlüssel bereitzustellen?
Lrkwz
Wie bei @lrkwz fehlt mir auch der Punkt, bei jedem Build einen neuen Schlüssel zu senden, wenn Sie ohnehin nach einem Passwort gefragt werden. Außerdem würde ich gerne die authorized_keys-Datei auf dem Remote-Server sehen ...
Fábio Duque Silva

Antworten:

3

ssh-copy-id fragt nach einem Passwort. Sie können sshpass -edie SSHPASS-Umgebungsvariable in Gitlab verwenden und festlegen.

user1973167
quelle
Können Sie auch ein Beispiel hinzufügen?
Yashu Mittal
1

Sie übergeben den ssh-Schlüssel nicht an rsync. Sie sollten so etwas tun, indem Sie den Befehl ssh ausführen, um den ssh-Schlüssel richtig zu identifizieren:

rsync -avuz -e 'ssh -i ~/.ssh/deploy_rsa' $CI_PROJECT_DIR/dist/ [email protected]:/var/wwww/example.com
Yaşar Şentürk
quelle