⚖️

【解説】【GitHub】HTTPSとSSHの違い

2022/10/30に公開1

はじめに

GitHubのようなリモートのgitリポジトリに接続する際には、通常HTTPSとSSHの2種類の接続方法がある。どちらも用途があり、一般的にはSSHの方が安全であると考えられているが、この問題は少し複雑である。

そこで、今回の記事ではGitHubにおけるHTTPSとSSHの両方の特徴と違いを簡潔に解説する。参考になれば幸いだ。

最大の違い

GitHubリポジトリに接続する際に使われる認証方法は、リモートに設定されているURLに依存する。GitHubが使用するデフォルトのURL形式はHTTPSと呼ばれる。これは主にWeb上で通信が行われる。

https://github.com/<user>/<RepositoryName>.git

一方で、SSHを使って実装することもできる。この場合は通常のSSHに対応しているLinuxサーバに接続するのと全く同じ形式を取る。

<user>@<ipaddress>:<folder>/<file>

GitHubやほとんどのserviceでは、gitのユーザで接続し、ユーザ名の入ったフォルダ下のファイルとして.gitのエンドポイントにアクセスするようになっている。

git@github.com:<user>/<RepositoryName>.git

HTTPS

HTTPS通信を使うメリットとして、Stack Overflowの回答では以下のように記載されている。

I assume HTTPS is recommended by GitHub for several reasons.

  1. It's simpler to access a repository from anywhere as you only need your account details (no SSH keys required) to write to the repository.
  2. HTTPS Is a port that is open in all firewalls. SSH is not always open as a port for communication to external networks

A GitHub repository is therefore more universally accessible using HTTPS than SSH.

上述の内容の要旨は、GitHubがHTTPSを使った通信を推奨している理由を検討しているものである。上述にて言及されていることは次の2つ。

  • アカウント情報だけでリポジトリに書き込めるので、どこからでも簡単にアクセスできるから。
  • HTTPSはすべてのファイアウォールで開かれているから。

それゆえに、GitHubのリポジトリはSSHよりもHTTPSを使ったほうが汎用的にアクセスできる。GitHubを使うのであれば、パスワード付きのHTTPS認証で十分事足りる。前述の通り、GitHubもデフォルトでHTTPSを使うことを推奨している

ところが、GitHubの公式ブログによると認証する際にアカウントのパスワードを使うことを禁止している。認証を使うにはアクセストークンを発行しなければならないことが言及されている。

SSH

通信プロトコルとして、HTTPSがSSHよりも安全性が低いことは誤解である。どちらも中間者攻撃から安全な接続を提供できる。両者も、基盤となる鍵が安全である限りは同じように接続できる。両者も公開鍵に基づいた認証を用いるものの、Gitを使ったHTTPSではパスワードが無線で送信される。

SSHの最大の長所は認証に用いる鍵である。SSHは情報漏えい対策としては最適解になるだろう。しかし、SSHは万能ではない。欠点として、鍵がハードディスク上のユーザアクセスが可能なファイルとして保存されることが挙げられる。さらに、別途個人でSSHで用いる鍵を生成して登録しなければならない。詳細は以下のQiita記事にて確認してほしい。

https://qiita.com/shizuma/items/2b2f873a0034839e47ce

おわりに

今回の記事では、非常に簡潔だがGitHubにおけるSSHとHTTPSの違いを簡潔に解説した。本記事の要旨は以下の通りである。

【HTTPS】

  • アカウント情報だけでリポジトリに書き込めるので、どこからでも簡単にアクセスできる。
  • すべてのファイアウォールで公開されている。
  • GitHub公式が推奨している通信。

【SSH】

  • 情報漏えい対策としては最適解。
  • 鍵がハードディスク上のユーザアクセスが可能なファイルとして保存されることが欠点。

参考サイト

https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/

https://stackoverflow.com/questions/11041729/why-does-github-recommend-https-over-ssh

https://www.howtogeek.com/devops/should-you-use-https-or-ssh-for-git/

GitHubで編集を提案

Discussion

royecroyec

SSHの最大の長所は認証に用いる鍵である。SSHは情報漏えい対策としては最適解になるだろう。

こちら、具体的にどのようにhttpsと異なるのでしょうか?