GitLab CI:SSHが失敗し、秘密鍵を認証できません
Aug 18 2020
このリンクをたどって、Gitlab-CIのサーバーにSSHで接続しようとしました。SSHキーについては、サーバーにアクセスして、公開キーと秘密キーを生成しました。秘密鍵はGitLabCI / CDenv変数に抽出されます。
YAMLテンプレートは以下のとおりで、ほとんどがリンクからコピーされています。
image: docker:19.03.8
services:
- docker:19.03.8-dind
deployment:
variables:
ip: <ip-address>
script:
- apk add --update openssh-client sshpass
- eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | ssh-add - > /dev/null
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- export SSHPASS=$AWS_PASSWORD - sshpass -e ssh -o StrictHostKeyChecking=no -vvv ubuntu@$ip echo testing
ただし、秘密鍵にアクセスしようとしたときにエラーが発生しました。
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /root/.ssh/id_rsa
debug3: no such identity: /root/.ssh/id_rsa: No such file or directory
debug1: Trying private key: /root/.ssh/id_dsa
debug3: no such identity: /root/.ssh/id_dsa: No such file or directory
debug1: Trying private key: /root/.ssh/id_ecdsa
debug3: no such identity: /root/.ssh/id_ecdsa: No such file or directory
debug1: Trying private key: /root/.ssh/id_ed25519
debug3: no such identity: /root/.ssh/id_ed25519: No such file or directory
debug1: Trying private key: /root/.ssh/id_xmss
debug3: no such identity: /root/.ssh/id_xmss: No such file or directory
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
debug3: send packet: type 50
debug2: we sent a password packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password
Permission denied, please try again.
それが助けになるなら、私はgitlab共有ランナーを使用しています。
[更新]
接続したいサーバーに追加するのを忘れたので、生成id_rsa.pub
した公開鍵をauthorized_keys
ファイルに追加しました。
[編集1]
提案されているように、ssh-keyscanを使用して既知のホストを追加し、出力を変数$ SSH_KNOWN_HOSTSとしてコピーしました。更新されたyamlファイルの下。ただし、同じエラーが発生しました。
deployment:
variables:
ip: <ip-address>
script:
- apk add --update openssh-client sshpass
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | ssh-add - > /dev/null - mkdir -p ~/.ssh - chmod 700 ~/.ssh - touch ~/.ssh/known_hosts - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
- export SSHPASS=$AWS_PASSWORD - sshpass -e ssh -o StrictHostKeyChecking=no -vvv ubuntu@$ip echo testing
回答
2 DV82XL Aug 18 2020 at 12:45
私はsshpass
通常公開鍵/秘密鍵を使用しているので、よくわかりません。リモートサーバーでSCP
/SSH
コマンドを実行するように設定するジョブの例を次に示します。
deploy:
stage: deploy
variables:
hostname: app-dev
before_script:
# optional step if you decide to use a hostname instead of IP address
- cp -f ./network/etc/hosts /etc/hosts
# Setup SSH
- which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )
- eval $(ssh-agent -s) - ssh-add <(cat $SSH_PRIVATE_KEY)
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan $HOSTNAME >> ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts script: # Copy files and execute commands - scp ./scripts/install_package.sh root@$HOSTNAME:/tmp/deploy
- ssh root@$HOSTNAME "/tmp/deploy/install_package.sh && exit"
パイプラインを実行する前に、次のことを行う必要があります。
- を使用してsshキーペアを生成します
ssh-keygen
。パスフレーズは使用しないでください。公開鍵はで終わり.pub
、秘密鍵には拡張子がありません。 - リモートサーバーにSSHで接続し、公開鍵の内容をにコピーします
~/.ssh/authorized_keys
- GitLabのにあなたの秘密鍵の内容をコピーし、ファイルの環境変数と呼ばれます
SSH_PRIVATE_KEY
$HOSTNAME
環境変数を使用する場合は、パイプラインで変数を定義/etc/hosts
し、パイプラインコンテナ内のファイルにIP /ホスト名を追加します。それ以外の場合は、代わりにIPアドレスを使用してください。