0
0

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をするメリットと使い方

Last updated at Posted at 2024-12-25

GitHubにおけるHTTPS接続とSSH接続の使い分け

GitHubのリモートリポジトリにアクセスするにはHTTPS接続SSH接続がある。この2つの特徴をまとめると以下のようになる。

項目 HTTPS接続 SSH接続
通信速度 SSHより若干遅い HTTPSよりも若干速い
安定性 SSHより若干不安定 HTTPSよりも若干安定(特に大規模リポジトリの操作)
メリット
  • Gitがあればすぐに使える
  • 会社のネットワークやファイアウォールで制限されにくい
  • 一度設定すればパスワード入力不要で操作ができる
  • より安全な認証(公開鍵認証)
  • 2要素認証を回避して使える
デメリット
  • 2要素認証を使う場合はGitHubのPersonal Access Tokenが必要
  • 大規模リポジトリのクローンやプッシュで不安定になることがある
  • SSHキーの生成・登録が必要
  • 一部の企業ネットワークではSSHがブロックされることがある
使いどころ
  • 環境構築が簡単で済む場合(初心者向け)
  • SSHが制限されている環境(会社のネットワークなど)
  • 頻繁にリポジトリを操作する場合(認証不要で快適)
  • より安全な認証が求められる場合

結論

  • 簡単に使いたい or 企業のネットワークで使うならHTTPS
  • 頻繁に使う or セキュリティを重視するならSSH

WindowsでSSHキーを発行する時の留意点

  • SSHキーを発行する際はGit Bashを使うのが便利。(GitBashはGitをインストールすると一緒にインストールされる)
  • 発行されたSSHキーはデフォルトで「C:\Users\ユーザ名.ssh」フォルダに配置される

SSHキーの発行

Git Bash
# ダブルクオテーションなくても良い。
# 入力する文字列の中で半角スペースがある際にダブルクオテーションで囲めば半角スペースも認識してくれる。
# ダブルクオテーション入力を常習化しておいた方が良い
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

# Generating public/private rsa key pair.

# sshキーの作成場所を指定。デフォルトで良いならそのままEnter
# 変更例①:D:/key/id_rsa
# 変更例②:D:/key/sample (sampleという名前の鍵ができる)
Enter file in which to save the key (/c/Users/ユーザ名/.ssh/id_rsa):

# パスフレーズ(SSHキーのパスワード)を指定。
# SSHキーが漏洩してもパスフレーズあれば安心。
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

# Your identification has been saved in /c/Users/ユーザ名/.ssh/id_rsa
# Your public key has been saved in /c/Users/ユーザ名/.ssh/id_rsa.pub
# The key fingerprint is:
# SHA256:ーーー your_email@example.com
# The key's randomart image is:
# +---[RSA 4096]----+
# |      .          |
# |     . o         |
# |  .   = o        |
# |   o + +    .    |
# |. o o + S  . o   |
# |.+ = * o  . . o  |
# |+ + E =..  o o . |
# | =.+ o o+ ..o o  |
# |..+.o==o+=o.+=   |
# +----[SHA256]-----+

SSHキーをSSHエージェントに追加

SSHエージェント

SSHキーの管理と認証を簡単にするためのプログラム。
SSHエージェントは、SSHキーをメモリに保持し、SSH接続を行う際に自動的にキーを提供することで、パスフレーズの再入力を省略できる。

SSHエージェントの機能

  • SSHキーの管理:複数のSSHキーをメモリに保持し、適切なキーを簡単に使える
  • パスフレーズのキャッシュ:パスフレーズを設定している場合、最初にSSHキー追加の時にパスフレーズを入力する。それ以降、SSHエージェントがキーとパスフレーズをキャッシュするため、再度パスフレーズを入力する必要がなくなる
  • 自動認証:SSH接続する際にSSHキーを自動で設定する
Git Bash
# SSHエージェントの起動
eval "$(ssh-agent -s)"

# SSHキーをSSHエージェントに追加
ssh-add ~/.ssh/id_rsa

公開キーをコピー

Git Bash
# 公開キーを表示する
cat ~/.ssh/id_rsa.pub

# 表示されたid_rsa.pubの中身の内メールアドレス以外をコピーする
# 例えば公開鍵の内容が次のような場合、コピー対象は「ssh-rsa AAACSfNxxxxxxxxxxxxxxxx==」
# (メールアドレス直前の半角スペースはコピー不要)
# ssh-rsa AAACSfNxxxxxxxxxxxxxxxx== your_email@example.com

公開キーをGithubに登録する

1.GitHubの右上にあるプロフィールアイコンをクリックし、「Settings」を選択
2.左側のメニューから「SSH and GPG keys」を選択
3.「New SSH key」ボタンをクリックする。
4.「Title」にキーの名前を入力し、「Key」に先ほどコピーした公開キーの内容を貼り付ける。
5.「Add SSH key」ボタンをクリックしてキーを追加する。

SSH接続テスト

Git Bash
# SSHエージェントが正しく設定されているか確認するために、GitHubへの接続をテスト
ssh -T git@github.com

# 正常に接続できると以下メッセージが表示される。
# Hi xxxxx! You've successfully authenticated, but GitHub does not provide shell access.

SSHでクローン

1.GitHubのリポジトリページの「Code」ボタンをクリックし、SSHのURLをコピー
2. Git Bash上で以下コマンドを実行。
Git Bash
# 前提:クローンしたいフォルダに移動した状態で実行
git clone git@github.com:your-organization/internal-repo.git

SSHでpush

ssh接続でpushする場合は、事前にgit remote set-urlコマンドを使い、pushする先のリモートリポジトリURLをSSH用のURLに変更する必要がある。
今回の場合、リモートリポジトリURLをhttps://github.com/xxx/sample.git(https接続)からgit@github.com:xxx/sample.git(SSH接続)に変更する

Git Bash
# 現在のリモートリポジトリURLを確認する
# origin  https://github.com/xxx/sample.git (fetch)
# origin  https://github.com/xxx/sample.git (push)
git retemo -v

# originのリモートURLをssh用のURLに変更する
git remote set-url origin git@github.com:xxx/sample.git


# 再度、現在のリモートリポジトリURLを確認する
# 以下のようにSSH用のURLになっていればSSHでpushする準備はOK
# origin  git@github.com:xxx/sample.git (fetch)
# origin  git@github.com:xxx/sample.git (push)
git retemo -v

発生したエラーと対応方法

Permission denied (権限がない)

エラー内容
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

原因

Githubに公開鍵の内容登録をしていない。もしくは、GitHubに登録したSSH公開鍵の内容が間違っている場合に発生する。
一度登録した公開鍵は編集ができないので、新しく公開鍵を登録すれば良い

ERROR: Repository not found.(リポジトリが見つからない)

エラー内容
ERROR: Repository not found.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

原因

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?