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 $SERVER_USER@8.8.8.8
    - rsync -avuz $CI_PROJECT_DIR/dist/ $SERVER_USER@8.8.8.8:/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).

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.


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/ $SERVER_USER@8.8.8.8:/var/wwww/example.com
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.