GitでSSHKeyを使って接続する

2016.11.10 (木)

くそみたいに頻繁に接続するのにパスワードを覚えない輩はSSHKeyのパスフレーズなしの秘密鍵でもって接続するのがよいです。くそみたいなラッパーを書いている人もいるけど、普通に.ssh/config使ったほうがやりやすいです。

SSH鍵の作成

SSHの鍵の作成と登録は準備しておきます。パスワードなしで鍵のペアを作成します。それからサーバー側のauthorized_keysに公開鍵を登録しておく。Githubの場合はコンパネから同様に公開鍵を登録しておく。Settingから「SSH and GPG keys」という項目から登録できます。

SSHで普通に接続できるか確認

まずは普通にssh接続できるか確認します。

ssh git@github.com -i /PATH/SSHKEY.pem
PTY allocation request failed on channel 0
Hi [GithubのID]! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.

Githubの場合は接続確認だけさせてくれて、実際のファイルやディレクトリにはアクセスできません。successfullyがでていればよいです。自分で作ったリモートリポジトリの場合は普通にログインできます。

.ssh/configに登録

これはいつものように登録。Githubの場合は以下のようになるかと。

# github
Host            mygithub
HostName        github.com
User            git
IdentityFile    /PATH/SSHKEY.pem

remote add origin ssh://….

リモートリポジトリを登録する前にちょっとご注意。
Githubのリモートリポジトリのコピペがちょっとおかしい。

git@github.com:[GithubのID]/repository_name.git (誤)
 ↓
git@github.com:22/[GithubのID]/repository_name.git (正)※22は省略してもいいかも。

ここら当たりがよくわからないのですが、Sourcetreeを使うとこのURLだとアクセスできなくなります。コマンドラインだと普通に使えます。コマンドラインではGithubからコピペしたURLではアクセスできません。
SourceTreeからGithubへpushすると以下のようなエラーがでます。

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v --tags origin master:master
Pushing to ssh://git@github.com:22/osamuya/common_class.git
Unable to open connection:
Host does not existfatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

Github以外の自分のリポジトリの場合はそのアクセスURLでアクセスしてください。
通常ここでは以下のようなコマンドでcloneしてくるのですが、

git clone ssh://git@github.com:22/[GithubのID]/repository_name.git 

.ssh/configに登録した場合は、

git clone ssh://mygithub:22/[GithubのID]/repository_name.git 

というようにショートカットで登録します。これでパスワードなしでいろいろできる。cloneでファイルが落ちてくればOKです。

cloneとかpushとか

ここまできたら、git push, git fetchとパスワードなしでできるようになっているはずです。