【解説】【GitHub】HTTPSとSSHの違い
はじめに
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.
- 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.
- 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記事にて確認してほしい。
おわりに
今回の記事では、非常に簡潔だがGitHubにおけるSSHとHTTPSの違いを簡潔に解説した。本記事の要旨は以下の通りである。
【HTTPS】
- アカウント情報だけでリポジトリに書き込めるので、どこからでも簡単にアクセスできる。
- すべてのファイアウォールで公開されている。
- GitHub公式が推奨している通信。
【SSH】
- 情報漏えい対策としては最適解。
- 鍵がハードディスク上のユーザアクセスが可能なファイルとして保存されることが欠点。
参考サイト
Discussion
こちら、具体的にどのようにhttpsと異なるのでしょうか?