Gitlab CI - ปรับใช้ผ่าน SSH ไปยังเซิร์ฟเวอร์ระยะไกล


12

ฉันมีสภาพแวดล้อม Gitlab โดยใช้ Gitlab CI สำหรับโครงการใหม่เพื่อเป็นพยานเกี่ยวกับไฟล์ที่รวบรวมและคัดลอกผ่าน rsync ไปยังเซิร์ฟเวอร์ที่ใช้งานจริง

เครื่องที่สร้างทรัพยากรเหล่านี้คือ exec คืออิมเมจของ docker (โหนด 6) แต่ตอนนี้ฉันต้องคัดลอกไฟล์ผลลัพธ์จากคอนเทนเนอร์ container ที่คำสั่ง Docker ไปยังเซิร์ฟเวอร์โดยใช้ linux ... ปัญหาของฉันคือการเชื่อมต่อผ่าน ssh ผ่าน rsync

ขณะนี้ฉันมีดังต่อไปนี้:

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

จากนี้ฉันได้รับ:

    /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
มีบางอย่างที่ฉันไม่ได้เน้นที่นี่: คุณกำลังสร้างคีย์ ssh ใหม่ทุกครั้งที่สร้างไม่ได้ใช่มั้ย จุดประสงค์ของการใช้ ssh leys คืออะไรคุณต้องมี pwd ในการปรับใช้คีย์ผับ
lrkwz

เช่น @lrkwz ฉันยังขาดจุดในการส่งคีย์ใหม่ในทุกบิลด์เมื่อคุณจะถามรหัสผ่านด้วยซ้ำ นอกจากนี้ฉันชอบที่จะเห็นไฟล์ authorized_keys บนเซิร์ฟเวอร์ระยะไกล ...
Fábio Duque Silva

คำตอบ:


3

ssh-copy-id กำลังขอรหัสผ่าน คุณสามารถใช้sshpass -eและตั้งค่าตัวแปรสภาพแวดล้อม SSHPASS ใน Gitlab


คุณสามารถเพิ่มตัวอย่างได้หรือไม่
Yashu Mittal

1

คุณไม่ได้ส่งคีย์ ssh ไปที่ rsync คุณควรทำสิ่งนี้ซึ่งดำเนินการคำสั่ง ssh เพื่อระบุคีย์ ssh อย่างถูกต้อง:

rsync -avuz -e 'ssh -i ~/.ssh/deploy_rsa' $CI_PROJECT_DIR/dist/ $SERVER_USER@8.8.8.8:/var/wwww/example.com
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.