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
簡易手順を記載します。
- GitHubにログイン→右上の自分のアイコン→Settings→Developper settings→Personal access tokens→Generate new token
- Noteにトークンの説明などを入力
- Expirationに有効期限を設定(無期限は非推奨)
- Select scopesは「repo」にチェック
- Generate tokenをクリック
2. デプロイ先のoriginのurlを変更する
- デプロイ先のサーバーにSSHなどで接続
- デプロイ先のディレクトリまで移動
- エディタで .git/config を開く(例:vi .git/config)
- [remote "origin"]のurlを次のように変更 https://ユーザー名:アクセストークン@github.com/リポジトリのパス
3. まとめ
GitHubからcloneしたリポジトリをSSH接続からHTTPS接続に変更する際の手順をご紹介しました。
なお、設定後はSSH接続と同様にgit pullするだけで同期でき便利ですが、アクセストークンに有効期限を設定した場合は期限が過ぎれば更新が必要になります。