3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【備忘】 GitHub へのアクセスは、ssh か https + PAT のどっちが良いのか?

Posted at

見直してみた

これまでずっと GitHub へは ssh でアクセスしてきた。鍵は、PC が新しくなった時に変えたっきりだ。ssh の方が https よりセキュアであろうという認識のもと。

ただ、いまやっている案件の実装で https を検討する機会があり、良い機会なのでどっちが良いのか検討してみた。

先に結論を述べると、どっちでも良い。

公式はどっち推奨?

以前は、https + PAT(Personal Access Token) 推しだったような気がするが、最近はそうでもないようで、どっちでも良いというのが、公式の立場のようである。

About remote repositories

以前は、

Cloning with HTTPS URLs (recommended)

とあったような気がするが、現在は、(recommended) は取れている。どっちの立場かは、ちょいちょい変わるようなので、”現在” は、どっちでも良いという感じらしい。

それぞれのメリット・デメリット

SSH

メリット

  • 公開鍵認証で安全
    パスワードやトークンを毎回送信せず、秘密鍵で署名するため漏洩リスクが低い。
    パスフレーズ付き鍵+Keychain/ssh-agentで自動認証
    一度パスフレーズを入力すれば、以降は自動認証が可能(macOSならKeychain連携も可)。
  • パスワード・トークン管理不要
    GitHubに公開鍵を登録するだけで、パスワードやPATの期限切れ・漏洩リスクがない。
  • CI/CDや自動化にも向く
    デプロイ鍵やマシンユーザー鍵を使えば、非対話的な自動化にも適している。
  • ファイアウォールやプロキシを回避できる場合がある
    HTTPSが制限されている環境でも、SSHが許可されていれば利用可能。

デメリット

  • 初期設定がやや複雑
    鍵ペアの生成・GitHubへの公開鍵登録・ssh-agent設定などが必要。
    企業や一部環境でSSHポート(22)がブロックされている場合がある
  • 鍵の管理が必要
    秘密鍵の紛失・漏洩リスク、パスフレーズ管理が必要。
  • 複数アカウント運用がやや面倒
    複数GitHubアカウントでの鍵切り替えにはssh configの工夫が必要。

HTTPS + PAT

メリット

  • セットアップが簡単
    追加の鍵生成不要。リモートURLをHTTPSにし、PATを発行するだけ。
  • ファイアウォールやプロキシ環境でも使いやすい
    ほとんどの企業ネットワークでHTTPS(443)は許可されている。
  • トークンの権限・有効期限を細かく管理できる
    Fine-grained tokenでリポジトリ単位・権限単位で制御可能。
  • CI/CDや自動化にも向く
    PATを環境変数やGitHub Actions Secretに設定して自動化できる。
  • 複数アカウント運用が比較的容易
    リモートURLにユーザ名を含めることで切り替え可能。

デメリット

  • 毎回トークンを送信する必要がある
    credential helperでキャッシュできるが、トークン自体は毎回送信される。
  • PATの有効期限・権限管理が必要
    期限切れや権限不足でpushできなくなることがある。
  • トークン漏洩時のリスク
    PATが漏洩すると、権限範囲内でリポジトリ操作が可能になる。
  • パスワード認証は廃止されている
    必ずPATやGitHub Appsトークンを使う必要がある。

ずらずら並べてみたが、どういう環境で使いたいか次第で、どっちもどっちという感じ。セキュリティ面だけにフォーカスしてみると、情報漏洩リスクでは、通信はどちらも同程度に安全として、ローカルに物理的に保存された秘密鍵と GitHub 上に保存された PAT のどっちが漏れやすいか?という話になり、それはローカルだろうと思いつつ、パスフレーズが keychain などに安全に保存されていれば大した問題ではなさそう。

鍵やトークンの権限設定などで言えば、Fine-grainded token の方が細かく設定できるし、Expire が設定できるので、PAT の方が漏洩したとしても、設定次第では安全かも知れない。

結論: どっちでも良い

セキュリティとは面倒なものなので、面倒だからやらないみたいなのはなしで、

  • HTTPS + Expire 付き PAT
  • パスフレーズ付き秘密鍵で SSH

のいずれかであれば、どちらでも良い。Expire なし、パスフレーズなしは NG。PAT やパスフレーズの毎回入力を回避する場合は、Keychain などに安全に保存。何等かの事情で OS のアップデートができないような人は、PAT の方が?

なんとなくではあるけど、今後 GitHub は再び HTTPS + PAT 推しに再度傾くのではないかなぁとは思う。また、GitHub の Organization の管理者的には、PAT の方が、SSH しないで PAT にしてね + 定期的に Token をローテートしてねなどのセキュリティ対策は、ユーザを確認して回るよりはやりやすいのかも知れない。

GitHub に限らず、Git の設定は一度やったら放置みたいな人も多いのかなと思うと、一度見直してみると良いかと。

3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?