はじまり
GitHub Actionsを構築する際に、SSH認証で引っ掛かったので、
あまり頻繁にシェルを触らない僕でも、本作業を楽に行えるように記事にしました。
SSH鍵の生成
参考記事
この生成は、こちらの記事を参考にさせていただきました。
手順
所有者のみに権限を付与する形でディレクトリを作る。
install -m 0700 -d ~/.ssh
ssh-keygen
する。メアドはGitHubに登録してあるものが良いと書いてあったので、GitHubの通知用のメアドにしました。52403447+
は何か勝手に付いてあったものです。付いていない方もいると思います。
(ssh-keygen
入力時に、-f ~/.ssh/id_rsa
のオプションを入れれば、この画面は出ないかも。)
ssh-keygen -t rsa -C 52403447+Landmaster135@users.noreply.github.com
Enter file in which to save the key(path)
と出てきますが、~/.ssh/id_rsa
に相当するpath
がコマンドを実行したディレクトリと同じであれば、何も入力せずにEnterでOK。
パスフレーズも入力せずにEnterで一応鍵を生成できる。
+---[RSA 3072]----+
|===O++.+. . |
| oB.=Eo + o |
|...X. o + |
|. + * . o.. |
| * + So. |
| . . .. +.. |
| . ooo |
| ..o = . |
| .o o . |
+----[SHA256]-----+
これで生成完了。ls
で確認して、秘密鍵と公開鍵の両方があるかどうかを確認する。
# ls
id_rsa id_rsa.pub
SSH鍵の内容をコピー
両方とも鍵があったので、参考記事の通り、pbcopy
を行ってみる。
しかし、僕の場合は、動きませんでした。
# pbcopy < id_rsa
bash: pbcopy: command not found
僕はこの時、WindowsからDockerイメージ(Ubuntu)を起動して行っていたのですが、どうやら、pbcopyはUbuntuにないらしい?
なので、少し調べてみると、xsel
というモジュールがある。今度はこれでやってみる。
# インストールして、
apt install xsel
# Let it xsel
xsel id_rsa --clipboard --input
xsel: Can't open display: (null)
: Inappropriate ioctl for device
しかし、できない。どうやら、Windowsのクリップボードにコピーするために何か通信の設定が必要みたいである。なので、WSL上では何か設定しなければならならないということが分かった。
面倒なので、普通に画面上で選択してコピーする。
生成した鍵をGitHub上に設定する。
以下は、こちらの記事を参考にしています。
秘密鍵の登録
GitHub Actionsで他のリポジトリに接続するリポジトリの'Settings'->'Secrets'の順に遷移して、環境変数として秘密鍵を登録します。
下の方にTOFEEDFETCHER
という名前の環境変数が追加されました。
公開鍵の登録
ユーザーの設定から、'SSH and GPG keys'をクリックして、この画面で公開鍵を入力します。
入力後にパスワードを要求される場合があります。
Workflowに、鍵認証の処理を書く。
書いた処理が以下になります。
Authenticate SSH
の部分とnpm install ssh://github.com
がSSH関連の処理になります。ssh://
を付けるのを忘れない。
name: feed
on:
issue_comment:
types: [created, edited]
jobs:
updateFeed:
runs-on: ubuntu-latest
steps:
- name: apt update
run: sudo apt update
- name: apt install curl
run: sudo apt install curl -y
- name: Checkout
uses: actions/checkout@v2
- name: node set up
uses: actions/setup-node@v2
with:
node-version: '16.13.1'
- name: Authenticate SSH
env:
PRIVATE_KEY: ${{ secrets.TOFEEDFETCHER }}
run: |
mkdir -p ~/.ssh
echo "$PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
chmod 700 ~/.ssh/id_rsa
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa
ssh-keyscan -H github.com >> ~/.ssh/known_hosts
- name: Confirm version of node and npm
run: |
node -v
npm -v
- name: Install feedFetcher
run: npm install ssh://github.com/Landmaster135/feed-fetcher
- name: run feedFetcher
run: |
chmod 777 ./node_modules/feed-fetcher/bin/run
./node_modules/feed-fetcher/bin/run --config-yaml=configOfFeedFetcher.yml
- name: git setting
run: |
git config --local user.email "52403447+Landmaster135@users.noreply.github.com"
git config --local user.name "Landmaster135"
- name: git commit
run: |
git log -1
git add README.md
git diff --cached --quiet || (git commit -m "Update feed snippet" && git push origin main)
おしまい
今回、httpsでやればこんな面倒ではなかったですが、なんかsshでやってみました。
本当はスキーム名をyamlに書かないでinstallしたかったけど分からず。
とりあえず、今回は動かせたということで一旦休憩。