例えば、以下の状況で運用しているgitリポジトリに接続するとします。
- リモートサーバー:repository.example.jp
- リモートリポジトリのディレクトリ:/path/to/repository/repo.git
- ユーザー名:hoge
- 接続方法:SSH
- ポート:22222
この場合、次のコマンドを実行することでリポジトリにアクセスできます。
git clone ssh://hoge@repository.example.jp:22222/path/to/repository/repo.git
ここで、SSHログイン時にパスワード認証ではなく鍵認証している場合、秘密鍵のファイル名がデフォルトの「id_rsa*1」であるならば、上記のままでアクセス可能です。
しかし、運用上の都合で秘密鍵が「id_rsa」以外にも複数存在している、なんてことありがちですよね?
秘密鍵が複数存在している場合は、サーバーごとの秘密鍵の名前を示すための設定ファイルを作成しましょう。
ついでに接続ポートも設定可能です。
設定ファイル作成
下記の内容で ~/.ssh/config ファイルを作成します。複数のサーバー設定を記載可能です。
Host repo.remote HostName repository.example.jp User hoge IdentityFile ~/.ssh/id_rsa.repo.remote Port 22222 Host repo.local HostName 192.168.1.222 User huga IdentityFile ~/.ssh/id_rsa.repo.local Port 22
- 「Host」……任意の名前でOK。エイリアスとして使用。
- 「HostName」……接続するサーバーのIPアドレスやFQDN。
- 「User」……自分のID。
- 「IdentityFile」……秘密鍵のパス。秘密鍵には任意のファイル名を付けられます。
- 「Port」……SSHのポート。
configファイル作成後は下記のコマンドで接続できます。
git clone ssh://repo.remote/path/to/repository/repo.git
~/.ssh/config はすべてのSSH接続で共有
なお、~/.ssh/config の設定は、gitに限らず、すべてのssh接続で参照されます。
ということは、単純にサーバーへSSH接続するだけなら、上記の設定の場合、
# repository.example.jpへssh接続 ssh repo.remote # 192.168.1.222へssh接続 ssh repo.local
だけで済んじゃいます。
参考にしたサイト
- git+sshでデフォルト(id_rsa)以外のキーファイルを指定したい場合 - yukke.org Diary
- ~/.ssh/config で簡単に複数ホストへのSSH接続を管理する - すぱぶろ
- OpenBSD manual pages
- ~/.ssh/config ファイルの詳細なマニュアル
2013-09-24 追記
「設定ファイル作成」の説明が紛らわしかったため修正
GitHubにid_rsa以外の名前の秘密鍵で接続(2014-04-28 追記)
GitHub用の秘密鍵の名前を id_rsa 以外にしたい場合は、次の設定を ~/.ssh/config に記述してください。
Host github.com HostName github.com # 固定値 User git # 固定値 IdentityFile ~/.ssh/id_rsa.github # GitHub用秘密鍵 Port 22 # 固定値
GitHubへのアクセスは通常通り「git@github.com:...」でOKです。
git clone git@github.com:nilfigo/nilfigo.github.io.git
2018-11-01 修正
ドメイン例を「*.example.jp」に変更
わかばちゃんと学ぶ Git使い方入門〈GitHub、Bitbucket、SourceTree〉
- 作者: 湊川あい,DQNEO
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2017/04/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
GitHubポケットリファレンス (POCKET REFERENCE)
- 作者: 澤田泰治,小林貴也
- 出版社/メーカー: 技術評論社
- 発売日: 2018/09/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
*1:公開鍵アルゴリズム(キータイプ)がRSAの場合