仕事であるサーバへアクセスするのに、 SSH の公開鍵を送るように頼まれた。 そういえば今までずっと同じ鍵を使い続けていたけれど、いちおうこういのは管理上分けておいた方がいいかもしれない。
ということでかなり久しぶりに鍵を作成。5年ぶりぐらい?
ssh-keygen -C <メールアドレス> -f id_rsa.hogehoge
手元のいくつかのサーバも新しい鍵を使えるように authorized_keys に追加しておく。 ssh-copy-id コマンドというものを今回初めてしった。 リモートホスト上の ~/.ssh/authorized_keys に、ローカルホストから直接公開鍵を追加することができる。こんな便利なものがあったとは。
ssh-copy-id -i ~/.ssh/id_rsa.hogehoge naney@サーバ名
デフォルトとは異なる新しい名前で作ったこの鍵もリモートホストへの接続に使えるようにするため、ローカルの ~/.ssh/config に設定を追加しておく。
IdentityFile ~/.ssh/id_rsa.hogehoge
それと ~/.profile の中で呼んでいる keychain の引数にも ~/.ssh/id_rsa.hogehoge を追加。
この間申し込んだ「さくらのレンタルサーバ プレミアム」の設定をぼちぼち開始。
まずはサーバ上に手持ちの公開鍵を追加。 ローカルホストで以下を実行。
ssh-copy-id アカウント@アカウント.sakura.ne.jp
[ さくらのレンタルサーバ プレミアム ] [ ssh-copy-id ]
サーバ上の特定の Git リポジトリのみにアクセスできる SSH 鍵を作ってみた。
具体的にいうと、SSH 鍵を作って、さくらのレンタルサーバ上に dotfiles 用 Git リポジトリを作ってそこだけを読み書きできるように設定した。今回は Gitosis とかそういう大袈裟なのは使わないない方向で。
まずサーバに SSH で入ってホームディレクトリの下に Git リポジトリを作成。
$mkdir -p /home/naney/var/git/dotfiles.git $cd /home/naney/var/git/dotfiles.git $git --bare init
通常の git-ssh は特定のリポジトリだけアクセスを許可するとかできない。 なのでさきほど作った Git リポジトリのみアクセスできるようなラッパーを用意する。
#!/bin/sh repo=$(eval echo $(echo ${SSH_ORIGINAL_COMMAND} | cut -d' ' -f2)) if [ "x${repo}" != "x/home/naney/var/git/dotfiles.git" ]; then echo "No access granted to reporitory ${repo}" 1>&2 exit 1 fi /home/naney/local/git/bin/git-shell -c "${SSH_ORIGINAL_COMMAND}"
これをサーバ上で /home/naney/local/bin/git-shell-dotfiles という名前で保存し実行権限をセットしておく。 なお Git は ~/local/git の下に以前インストールしておいてある。
複数のディレクトリを指定できるようにするとか、そういのはよしなにどうぞ。
$cd ~/.ssh $ssh-keygen -C dotfiles -f id_rsa.dotfiles $ssh-copy-id -i ~/.ssh/id_rsa.dotfiles naney@example.sakura.ne.jp
さきほどの ssh-copy-id で、サーバ上の ~/.ssh/authorized_keys の最後に新しい鍵の行が追加されている。この行の先頭に以下を追記する。
command="/home/naney/local/bin/git-shell-dotfiles",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
これでこの鍵で接続した時は git-shell-dotfiles のみが直接実行できるようになる。
なおシェルをフルには使わせてくないけれど、任意のディレクトリの Git リポジトリの読み書きができても良いのであれば直接 git-shell を指定する。
command="/home/naney/local/git/git-shell -c \"$SSH_ORIGIAN_COMMAND\"",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
config ファイルに
IdentityFile ~/.ssh/id_rsa.dotfiles
を追記し、この鍵も使えるようにしておく。
きちんとできていれば
git clone naney@example.sakura.ne.jp:/home/naney/var/git/dotfiles.git
とすることで clone できることを確認。またサーバ上の他の場所に作ったリモートリポジトリにアクセスができないようになっていることをチェック。(テストする時は他の SSH 鍵で接続されないように .ssh から他の鍵を削除する)。
~/.ssh/id_rsa.dotfiles を適宜別の端末にコピーし、~/.ssh/config に IdentityFile を書き込めば、同様に git clone できるようになる。
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。