LoginSignup
1
0

More than 1 year has passed since last update.

Github Actionsで別のリポジトリにSSH接続するための手順

Last updated at Posted at 2022-01-09

はじまり

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'の順に遷移して、環境変数として秘密鍵を登録します。

20220109_07.jpg

下の方にTOFEEDFETCHERという名前の環境変数が追加されました。

20220109_08.jpg

公開鍵の登録

ユーザーの設定から、'SSH and GPG keys'をクリックして、この画面で公開鍵を入力します。
入力後にパスワードを要求される場合があります。

20220109_09.jpg

Workflowに、鍵認証の処理を書く。

書いた処理が以下になります。
Authenticate SSHの部分とnpm install ssh://github.comがSSH関連の処理になります。ssh://を付けるのを忘れない。

.github/workflows/feed.yml
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したかったけど分からず。
とりあえず、今回は動かせたということで一旦休憩。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0