パスフレーズ無しの鍵ペアを作成する。
$ ssh-keygen -N "" -f ~/.ssh/auto_execute Generating public/private rsa key pair. Your identification has been saved in /*******/.ssh/auto_execute. Your public key has been saved in /*******/.ssh/auto_execute.pub. The key fingerprint is: *********************************************** **@********************* The key's randomart image is: +--[ RSA 2048]----+ |*****************| |*****************| |*****************| |*****************| |*****************| |*****************| |*****************| |*****************| |*****************| +-----------------+ $ ls /*******/.ssh/auto_execute* -la -rw------- 1 ** ** 1675 ****-**-** **:** /*******/.ssh/auto_execute -rw-r--r-- 1 ** ** 406 ****-**-** **:** /*******/.ssh/auto_execute.pub $ cat /*******/.ssh/auto_execute.pub ssh-rsa ************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************ **@********************* no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="cvs server"
上で作ったパスフレーズ無しの専用鍵をつかうための設定を~/.ssh/configに書き込む。
$ cat ~/.ssh/config Host cvs_debian_org HostName cvs.debian.org IdentityFile ~/.ssh/auto_execute
マニュアルを読むと下のようにしてcvsにアクセスする方法が述べられている。今回はこれを用いない。
$ export CVS_RSH=ssh $ cvs -d :ext:****************@cvs.debian.org:/cvs/webwml checkout -l webwml
パスフレーズ無しの鍵を使ってcvsでアクセスする場合には、以下のようにして~/.ssh/configのhostの後ろに書いたホスト名を使う。
$ export CVS_RSH=ssh $ cvs -d :ext:****************@cvs_debian_org:/cvs/webwml checkout -l webwml
作成したパスフレーズ無しの専用鍵をホストの~/.ssh/authorized_keys に書き込む。このとき、オプションを追加し、さらにcommandオプションを以下のようにしておく。このオプションは全てのssh経由の入力を無視して、commandオプションで指定したコマンドを実行して接続を閉じる。これでcvsが発行するコマンドを確認する。
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="echo $SSH_ORIGINAL_COMMAND" ssh-rsa ************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
この状態でcvsコマンドを使うと、以下のようになる。cvsサーバがcvs serverというレスポンスを返したと表示されるが、これは上で指定したcommandオプションの引数の戻り値。つまりcvsコマンドが発行したコマンド。
$ CVS_RSH=ssh cvs -d :ext:****************@cvs_debian_org:/cvs/webwml checkout -l webwml cvs checkout: warning: unrecognized response `cvs server' from cvs server cvs [checkout aborted]: end of file from server (consult above messages if any)
この鍵ペアを使う場合は何があってもcvs serverしか実行させないようにするには、commandオプションに"cvs server"を指定すればよい。
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="cvs server" ssh-rsa ************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
再度cvsで確認。チェックアウトが成功していることが確認できる。
$ CVS_RSH=ssh cvs -d :ext:****************@cvs_debian_org:/cvs/webwml checkout -l webwml cvs checkout: Updating webwml
これ以降は通常通りupdateすればよい。パスフレーズは聞かれない。つまり、crontab に登録するコマンドに使える。
$ cvs update