Plan 9とGo言語のブログ

主にPlan 9やGo言語の日々気づいたことを書きます。

GitHubへHTTPSアクセスする場合はトークンを使った方が良さそう

GitHubGitHub Enterpriseで、HTTPSを経由したgit push git pullをするとログインIDとパスワードの入力を促されますが、二段階認証を有効にしていると、正しいIDとパスワードでも認証がエラーになります。この場合、repo スコープを有効にしたトークンを用意して、パスワードの代わりにトークンを入力すれば良いです。

トークン入力を省略するため ~/.netrc の利用を案内する記事がありますけれども、さすがにトークンとはいえプレーンな形で保存するのは良くないので、最低でも暗号化しておきましょう。

macOSの場合は、いちど入力すると以降はKeychain Access.appに保存されるので~/.netrc は不要です。Keychain Access.appに保存されない場合は ~/.ssh/configUseKeychain yes を設定すると保存できるようになります。

そんなことを同僚氏に話したところ、なんか普通に2段階認証を設定してなくてもトークンを使うのが良いらしいということを聞いたので、今後はHTTPSトークンでアクセスしようと思いました。

HTTPSを使いたい理由

トークンを使わなくても、SSHでアクセスすれば問題なかったんですが、この時は珍しくサブモジュールを使いました。

サブモジュールを登録したリポジトリをJenkinsでビルドする場合、

checkout([
    $class: 'GitSCM',
    branches: scm.branches,
    extensions: scm.extensions + [
        [ $class: 'SubmoduleOption',
          disableSubmodules: false,
          parentCredentials: true,
          recursiveSubmodules: true,
          reference: '',
          trackingSubmodules: false
        ],
    ],
    userRemoteConfigs: scm.userRemoteConfigs
])

このように書けばサブモジュールも拾ってきてくれますが、JenkinsのGitHub Branch Source pluginGitHubAPIを利用してgit pullするので、parentCredentials: trueでメインリポジトリで使った資格情報を参照するとHTTPSトークンでアクセスできますが、SSHの場合はそれとは別に鍵の設定が必要になります。あまりCI環境への依存を増やしたくなかったので、サブモジュールのremoteHTTPSにしておく必要があってSSHが使えませんでした。