🔏

Error loading key "/root/.ssh/id_ed25519": error in libcrypto

2023/03/03に公開

はじめに

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での設定を疑って試行錯誤していたので、全く見当違いでした。

設定例

.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