GitHub の通信プロトコルを SSH にするときの作業ノート
インターネットに接続可能な環境で PC 作業をするときは、作業時間の最後に 10 個近くのリポジトリーを自作シェルスクリプトで一括 push/pull している。 コマンドをバックグラウンド実行するのだが、本日、何かの理由で GitHub 側からユーザーとパスワードを問うダイアログボックスが表示されるようになった。 これを放置しておくとパスワードプロンプトが 10 個出てきてバカらしい。 本稿はこれの対策ノートだ。
原因:半分はわからない
半分は HTTPS プロトコルでリモートリポジトリーへ接続していることだという。 これを SSH 接続に改めれば、少なくとも確認ダイアログは出てこないという。 それを信じて以下の作業を実施する。
解決策:HTTPS での通信を SSH に全部変える
そもそも Cygwin に ssh が入っていなかった。インストールから作業。
Cygwin のセットアップツールの Net カテゴリーからそれらしいパッケージを選択してインストールする。
作業手順
コンソールでのコマンド実行、テキストエディターでの編集、ブラウザー上の操作を行う。
SSH 環境を構成する
Cygwin の ssh はクセがある。初期状態では $HOME をカスタマイズしている環境では
dotfile を生成できないのだ。
そこでファイル /etc/nsswitch.conf を編集してパスを明示的に指示する:
db_home: /%H/Documents
%H が Windows の環境変数 USERPROFILE を意味する。
私は環境変数 $HOME を Windows の $USERPROFILE/Documents に指定しているのでこうなる。
実際には symlink を定義して別のところに実体があるが、ここでは簡略化して説明した。
RSA 鍵を作成する
パスフレーズを忘れたので RSA 鍵を作り直す。GitHub に登録されているのはいじる必要なし。
bash$ cd ~/.ssh
bash$ ssh-keygen -t rsa
ちょっと下手なことはここに書けないので、その都度調べることにしよう。
GitHub の SSH に関する設定を構成する
作り直した公開鍵を GitHub の設定ページに追加する。画面の UI を見れば手順はわかる。 べらぼうに長い文字列をテキストボックスに貼り付けて追加ボタンを押す。
bash$ putclip < ~/.ssh/is_rsa.pub
コンソールに戻って確認:
bash$ $ ssh -T git@github.com
Hi showa-yojyo! You've successfully authenticated, but GitHub does not provide shell access
ローカルリポジトリーの設定を再構成する
コマンド git remote -v を実行すると https:// から始まるリモートリポジトリーのパスが表示されている。
これがダイアログ出現の直接原因らしいので、git:// に変更する。
前述のスクリプトの一部を流用して次のようにする:
local repos=(\
/path/to/repos1 \
/path/to/repos2 \
... \
)
for repo in "${repos[@]}" ; do
git -C $repo remote set-url origin git@github.com:showa-yojyo/${repo##*/}
echo Changed to $(git -C $repo remote -v)
done
以上だ。