GitやMercurialでSSH経由でcloneやpullなどをすることがかなり多くありますが、ポート番号や秘密鍵のパスがデフォルト(e.g. ~/.ssh/id_rsa
) と異なっていたり、ProxyCommandなどのSSHオプションを付けたりしたいことも多くの場合あります。
今回は、そのような場合の設定方法をまとめてみました。
~/.ssh/config
に書く
これが一番簡単ですね。Gitなどの操作以外にもSSH接続する場合によく使います。
僕は自分のPC(Mac book Air)でこのような設定をしています。
# ~/.ssh/config
Host *
IdentityFile /Users/user/.ssh/id_rsa
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
ServerAliveInterval 120
EC2インスタンスを頻繁に立ち上げたり削除したりするので、~/.ssh/known_hosts
を見ないようにするかつ、残さないようにしたいためにStrictHostKeyChecking no
とUserKnownHostsFile /dev/null
を設定しています。
また、サーバによってはSSHが切断されることがあるため、ServerAliveInterval 120
と少し長めですが設定しています。
~/.ssh/config
に書くことで簡単に設定できますが、諸事情で書けない(書きたくない)場合もあります *1 ので、Mercurial, Gitそれぞれの設定方法もまとめておきます。 *2
Mercurialの場合
--ssh
オプションを付けることで簡単にできます。
例えば、cloneしたい場合は、このようになります。
$ hg clone --ssh 'ssh -i /home/user/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' ssh://foo@bar.com//xxxx
毎回、--ssh
オプションを付けるのが面倒な場合は、~/.hgrc
に書くこともできます。
# ~/.hgrc
[ui]
ssh = ssh -i /home/user/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
Gitの場合
Mercurialと比べると若干面倒ですが、変数GIT_SSH
にSSHオプションを付けることでできます。~/git-ssh.sh
というファイルにSSHオプションを設定します。ファイル名やパスなどは任意です。
$ echo 'exec ssh -i /home/user/.ssh/id_rsa -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "$@"' > ~/git-ssh.sh
$ chmod +x ~/git-ssh.sh
cloneしたい場合は、次のようにします。
$ GIT_SSH='~/git-ssh.sh' git clone ssh://foo@bar.com/xxxx.git
最後に
MercurialやGitでSSHオプションを指定する場合の設定方法をまとめてみました。なんてことない小ネタですが、知っておくと便利ですのでぜひ活用してみてください。