富山のシステム開発・Web制作会社

GitHubに接続するプロトコルをSSHからHTTPSに変更する

GitHubからSSHでcloneしているサーバー上のリポジトリで、git pullした際に失敗することがあったためSSHからHTTPSに変更することにしました。
その背景と行った手順を記載します。

手順のみ知りたい方は 2. SSH接続からHTTPS接続に変更する手順 に進んでください。

1. 背景

これまで本番サーバーにデプロイする際など、サーバーからGitHub上のリポジトリをcloneする時にはDeploy keysとSSH接続による組み合わせで行ってきました。
一度設定すれば次回以降はgit pullするだけで同期できたため便利だったのですが、デプロイ先のサーバーによってはgit pullなど実行した際に「no matching mac found〜」と出てgit pullできない問題が発生するようになりました。

これは2022年3月15日頃にGitHubが行ったセキュリティ改善により、SSH接続する場合のMAC(メッセージ認証符号)の一部(古く、安全性の低いもの)が削除されたことによるものでした。
具体的には、git pullなどを実行すると次のようなメッセージが表示され、処理が中止されます。


no matching mac found: client hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160, hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96 server hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512,hmac-sha2-256
fatal: Could not read from remote repository.

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

弊社では数年前から契約している、さくらレンタルサーバー(FreeBSD9系)にて現象が発生しました。
回避方法としてはOpenSSHのバージョンを上げるかHTTPS接続に変更するかの二択になると思いますが、レンタルサーバーのOpenSSHはアップデートできないため、今回はHTTPS接続に変更することにより回避しました。
その際に行った手順について記載します。

2. SSH接続からHTTPS接続に変更する手順

1. GitHubにてaccess tokenを発行する

公式の説明の通りに操作します。
https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token#creating-a-token

簡易手順を記載します。

  1. GitHubにログイン→右上の自分のアイコン→Settings→Developper settings→Personal access tokens→Generate new token
  2. Noteにトークンの説明などを入力
  3. Expirationに有効期限を設定(無期限は非推奨)
  4. Select scopesは「repo」にチェック
  5. Generate tokenをクリック

2. デプロイ先のoriginのurlを変更する

  1. デプロイ先のサーバーにSSHなどで接続
  2. デプロイ先のディレクトリまで移動
  3. エディタで .git/config を開く(例:vi .git/config)
  4. [remote "origin"]のurlを次のように変更 https://ユーザー名:アクセストークン@github.com/リポジトリのパス

3. まとめ

GitHubからcloneしたリポジトリをSSH接続からHTTPS接続に変更する際の手順をご紹介しました。
なお、設定後はSSH接続と同様にgit pullするだけで同期でき便利ですが、アクセストークンに有効期限を設定した場合は期限が過ぎれば更新が必要になります。

この記事を書いた人
Chief Technology Officer

よく読まれている記事

メタバースとWEB3.0について

Laravel TelescopeとTelescope Toolbarで効率よくデバッグする

Safariでclamp()が効かない場合の対処法

【サンプルあり】今すぐ使える!便利な比較関数 min() max() clamp() のお話

CSS 子要素を親要素からはみ出して画面いっぱいに表示させる方法とWindowsブラウザの注意点

ディセントラライズド(decentralized)とは

メタバースとは

WEB3.0とは

LaravelとScribeで効率的にAPI仕様書を生成する

DXやメタバースなどバズワードについて思うこと

関連記事

メタバースとWEB3.0について

ディセントラライズド(decentralized)とは

メタバースとは