Error loading key "/root/.ssh/id_ed25519": error in libcrypto
はじめに
GitLab CIで、flutter用のjobを作成していた。このプロジェクトでは、private pluginを使用しており、それをSSHで取得する必要がありました。GitLab CIは、Bitriseと違いSSH cloneをbuilt-inサポートしていませんので、自身でSSH環境をセットアップする必要があります。
Using SSH keys with GitLab CI/CD: https://docs.gitlab.com/ee/ci/ssh_keys/
その際、ghcr.io/cirruslabs/flutterのdocker imageにおいて、SSHを使ってGitからPrivate pluginを取得しようとすると、表題のエラーが発生して躓いたのでメモしておきます。
原因
まず原因は、OpenSSLのバージョンが3.0.xであったことです。
これはghcr.io/cirruslabs/flutterのDocker imageが、Ubuntu 22.04をベースにしているためでした。
Ubuntu 20.04では表題のエラーは発生していません。
解決策
解決策は、Settings > CI/CD > Variablesに設定しているPrivate Keyの末尾に改行を入れることでした (なんてこったい...)
From: https://github.com/openssl/openssl/issues/13443
最初は、.gitlab-ci.yml
での設定を疑って試行錯誤していたので、全く見当違いでした。
設定例
...
analyze:
stage: test
image: "ghcr.io/cirruslabs/flutter:${FLUTTER_VERSION}"
before_script:
- command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )
- eval $(ssh-agent -s)
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- cp "$SSH_PRIVATE_KEY" ~/.ssh/id_ecdsa
- chmod 400 ~/.ssh/id_ecdsa
- echo "HOST *" >> ~/.ssh/config
- echo " StrictHostKeyChecking no" >> ~/.ssh/config
script:
- PATH="$PATH:$HOME/.pub-cache/bin"
- flutter analyze --no-fatal-infos
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
...
追記(2023/6/1):
https://hub.docker.com/r/cirrusci/flutter/ がdeprecatedとなっているので、https://github.com/cirruslabs/docker-images-flutter/pkgs/container/flutter へ変更しました。
Discussion