🔒

SSH秘密鍵のパスフレーズ自動入力

に公開

はじめに

パスフレーズ付の秘密鍵を使って SSH する作業を自動化したい場合に、パスフレーズを自動入力する必要がある。
例えば、Gitlab CI や GitHub Actions を使って、成果物をサーバーに配置したい場合等が考えられる。

準備

以下を準備してください。

  • SSH 秘密鍵を環境変数SSH_PRIVATE_KEYに設定
  • 上記秘密鍵のパスフレーズを環境変数SSH_PASSPHRASEに設定
  • sshをインストールしていること

手順

eval $(ssh-agent -s)
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo -e "#!/bin/sh\n\necho ${SSH_PASSPHRASE}" > /etc/ssh/passphrase
chmod 755 /etc/ssh/passphrase
echo "${SSH_PRIVATE_KEY}" | tr -d '\r' | DISPLAY=None SSH_ASKPASS=/etc/ssh/passphrase SSH_ASKPASS_REQUIRE=prefer ssh-add -
ssh-keyscan "${SERVER_HOST}" >> ~/.ssh/known_hosts
chmod 644 ~/.ssh/known_hosts
# 任意のSSHを実行できる
ssh ubuntu@"${SERVER_HOST}" "hostname"
scp -r dist ubuntu@"${SERVER_HOST}":~
脚注
  1. https://github.com/alpinelinux/docker-alpine/issues/404 ↩︎

  2. パスフレーズ入力用のプログラムを exec している箇所 ↩︎

GitHubで編集を提案

Discussion