Raspberry pi 上で動かすスクリプトを、Mac である程度開発を進めて、コミットしておいて、これを Raspberry pi 側から Clone して動かそうと思ったら最初うまくいかなくて困ったって話。
ローカルなんで SFTP とか SCP とかであげちゃえばって話はあるんだけど、後々のこと考えるとここ GitHub 経由させたかったのです。
TL;DR
うまく config が反映されてないっぽい。
以下のいずれかの方法を使えばOK。(後者はなにかとトラブルになりそうなので普通は前者でOK)
.ssh/config
のHost
がgithub
とかgh
とかにしてたなら、github.com
にしてみる- あるいはリポジトリをクローンするときのアドレスを
gh:username/repo.git
みたいにエイリアスにする
Mac だと起こらないんだよなぁ。Linux だから?謎です。
鍵を作って、コンフィグをかいた
ssh-keygen -t ed25519 -C "foo@example.com"
鍵名はデフォルトじゃなくて、ちゃんと GitHub 用に名前を付けた
コンフィグもかいた
Host github
User git
HostName github.com
IdentityFile ~/.ssh/com.github.ed25519
この辺は Mac の ~/.ssh/config
から鍵名以外全部コピーしたのであってるはず…だった。
(この思い込みで苦労することになりました)
疎通確認
こんな感じでちゃんと設定できてるか確認します。
ssh -T github
Hi nyagihime! You've successfully authenticated, but GitHub does not provide shell access.
こんな感じで、認証できたけど GitHub に SSH しちゃダメだよっていわれれば成功。
なので、これで設定は完了です。
リポジトリをクローン……できなかった
さて、GitHub 上にリポジトリをつくったので早速 Raspberry pi にクローンしてみます。
git clone git@github.com:nyagihime/some-project .
Cloning into '.'...
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
するとなぜかクローンできませんでした。
自分がオーナーだし、疎通確認もできたはずなのに。
原因を探す
あらためて GitHub のヘルプ とかをみつつ順番に確認していきます。
前回は手打ちでいれたので、今度はテスト用のコードをコピペでいってみました。
ssh -T git@github.com
git@github.com: Permission denied (publickey).
するとどういうことでしょう。認証が通りません。
ということで、詳細ログを出して再度テストします。詳細ログを出すには -v
をつけます。
-v
は verbose の頭文字で、「冗長な」とか「くどい」といった意味があります。
すると、今までは隠れていたログが見えるようになります。
いろいろありますが、この手の問題の場合大抵は鍵周りなので、まずは identity file
という行を探します。
debug1: identity file /home/pi/.ssh/id_rsa type -1
debug1: identity file /home/pi/.ssh/id_rsa-cert type -1
debug1: identity file /home/pi/.ssh/id_dsa type -1
debug1: identity file /home/pi/.ssh/id_dsa-cert type -1
debug1: identity file /home/pi/.ssh/id_ecdsa type -1
debug1: identity file /home/pi/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/pi/.ssh/id_ecdsa_sk type -1
debug1: identity file /home/pi/.ssh/id_ecdsa_sk-cert type -1
debug1: identity file /home/pi/.ssh/id_ed25519 type -1
debug1: identity file /home/pi/.ssh/id_ed25519-cert type -1
debug1: identity file /home/pi/.ssh/id_ed25519_sk type -1
debug1: identity file /home/pi/.ssh/id_ed25519_sk-cert type -1
debug1: identity file /home/pi/.ssh/id_xmss type -1
debug1: identity file /home/pi/.ssh/id_xmss-cert type -1
あれ、なぜかデフォルトの id_rsa
を探してます。
コンフィグの書き方がダメだった
先ほど書いたコンフィグですが、Host が github
だとダメみたいで、ここもちゃんと github.com
にすれば設定が反映されるようになりました。
-Host github
+Host github.com
User git
HostName github.com
IdentityFile ~/.ssh/com.github.ed25519
再テスト
ssh -T git@github.com
Hi nyagihime! You've successfully authenticated, but GitHub does not provide shell access.
まとめ
GitHub で使う鍵を config から指定するときは Host に github.com
とドメインまで含めて書けばよいみたいです。(今までこれで動いてたんだけどなぁ……)
通常、Host のところは短い別名にしておいて SSH コマンドをシンプルにして運用したりするんですが、GitHub にはシェルアクセスはできない(なんどもログに流れてた GitHub does not provide shell access
です)のでため、git
コマンドの補助用みたいな感じで割り切ってしまうのがよいと思います。
そこまで割り切る場合、鍵の付け合わせ専用にしちゃって、User
とか HostName
すら落としても動くかも…。
どうしても短い別名を使いたい
どうしても、Host にドメインをつけたくない場合は、逆にリポジトリのアドレスを修正すれば一応動きます。
つまり、
-git clone git@github.com:nyagihime/some-repository.git
# Host = github
+git clone github:nyagihime/some-repository.git
# Host = gh
+git clone gh:nyagihime/some-repository.git
という感じで、git@github.com
を config
で設定した Host の値にすればちゃんと動きます。
ただ、一般的な運用方法とは違うし、GitHub からコピーできるリポジトリリンクとかは git@github.com
を使う設定になってるので、おとなしくエイリアスを使わない運用にしておく方が良いのかなぁ、とは思います。