CVS リポジトリがリモートホストに存在する場合, リモートホストへ ノンパスログイン出来ることで pcl-cvs の利便性は飛躍的に向上する.
以下では ssh の RSA 公開鍵暗号による認証を用いてリモートホストへの ノンパスログインを実現する方法を記す.
pcl-cvs の設定方法に関しては CVS コマンドを Emacs から使う方法 (pcl-cvs) を参照せよ.
ここでは, 以下のような状況を想定している.
リモートホストの ssh デーモンの設定ファイル (例えば /etc/ssh/sshd_config) において以下のようになっていることを確認.
RSAAuthentication yes
このようになっていないのならば, 下記の方法は不可能である.
SSH のインストール方法に関しては IPA セキュアなWebサーバーの構築と運用 -- 4.2.1 OpenSSHのインストールと設定 を参照せよ.
ssh パッケージのインストールにより, 下記で必要とされるソフトウェアは 全てインストールされる.
# apt-get install ssh
ローカル (Emacs + pcl-cvs を起動する) ホスト で, 以下のコマンドで鍵を作る.
$ ssh-keygen -t dsa Generating public/private dsa key pair. (鍵生成中...) Enter file in which to save the key (鍵の保存場所) (/home/hero/.ssh/id_dsa): [デフォルト] Enter passphrase (empty for no passphrase): [長めのパスフレーズを] (鍵が生成された) Your identification has been saved in /home/hero/.ssh/id_dsa. Your public key has been saved in /home/hero/.ssh/id_dsa.pub. The key fingerprint is: 71:f0:fb:f9:34:ae:70:0c:ab:66:8f:52:ee:3a:cc:0d hero@hoge
パスフレーズとはパスワードと異なり, 8 文字制限が無いため, 長めの文章 を与えておくと覚えやすく, また推測されにくい. (もちろんあちこちに例題 として用いられるような文章はあまりよくない).
リモートホスト (ここでは foo.ne.jp) に公開鍵を置く. 当然鍵を一目に見 えるようにしてはいけないので, 本当はなんらかの外付けメディアで運ぶのが 一番安全だが, scp ならば暗号化されているので, とりあえず OK とする.
$ scp /home/hero/.ssh/id_dsa.pub foo.ne.jp:~/.ssh/authorized_keys
既にリモートホストに authorized_keys が存在し, 別のホストの公開鍵 が既に書き込まれている場合, 上記の方法では上書きされてしまうため, リモートホストの authorized_keys をエディタで開き, 手元の id_dsa.pub の内容を貼り付けること.
ローカルで X を起動し, ssh-agent の後ろにターミナルを起動のコマンド (xterm, kterm, rxvt 等) をくっつけて ssh-agent な (?) ターミナルを起動 する
$ ssh-agent kterm
そのターミナル上で以下のコマンドを入力する.
$ ssh-add
すると, 秘密鍵, 公開鍵作りで入力したパスフレーズを聞かれるので入力する.
Enter passphrase for /home/hero/.ssh/id_dsa: [先ほどのパスフレーズ] (認証されたら) Identity added: /home/hero/.ssh/id_dsa (/home/hero/.ssh/id_dsa)
認証後は, そのウィンドウ上, もしくはそのウィンドウ上から起動した ソフトウェアからなら, ノンパスでログインが可能となる.
既に起動しているターミナルから ssh-add による認証を行ないたい 場合は以下のようにする.
$ eval `ssh-agent -s` ; ssh-add Agent pid 11335 Enter passphrase for /home/morikawa/.ssh/id_dsa:
ここでパスフレーズを入力することでそのターミナル上からノンパス ログインが可能である.
上記で示したように,
$ ssh-agent kterm
と,
$ ssh-add
によってノンパスログインの可能なターミナルを準備する
あとはそのターミナル上から Emacs を起動するだけである. (フォアグラウンドジョブでもバックグラウンドジョブでも OK).
$ emacs &
では, その Emacs 上で M-x cvs-update をやってみよう. リモートリポジトリとのアクセスが可能になっているはずである.
ただし, このアクセスは先の ssh-add をおこなったターミナルによって可能 になっている. バックグラウンドジョブとしてEmacs を起動した場合, Emacs を起動しておきながらターミナルを停止させることは可能だが, それをすると Emacs からリモートリポジトリへのアクセスが不可能になるので注意して欲し い.
ssh-agent.el を用いることで Emacs 独自で RSA 認証を行なうことが可能な ようである. (未調査).
OpenSSH 日本語マニュアルページ
簡単 SSH
セキュアなWEBサーバーの構築と運用に関するコンテンツ
<URL:http://www.ipa.go.jp/security/awareness/administrator/secure-web/>
プログラミング豆知識 Linux 編 pcl-cvs
迷彩記憶 (2004-02-28)