[ 地球流体電脳倶楽部 / cc-env / CVS に関するメモ / SIGEN.htm ]

SSH で RSA 公開鍵暗号による認証


  1. 目的
  2. 前提
  3. ローカルホストへの SSH インストール
  4. RSA 認証の環境構築
  5. RSA 認証の接続確認
  6. Emacs + pcl-cvs でノンパスログインするには
  7. 参考資料

目的

CVS リポジトリがリモートホストに存在する場合, リモートホストへ ノンパスログイン出来ることで pcl-cvs の利便性は飛躍的に向上する.

以下では ssh の RSA 公開鍵暗号による認証を用いてリモートホストへの ノンパスログインを実現する方法を記す.

pcl-cvs の設定方法に関しては CVS コマンドを Emacs から使う方法 (pcl-cvs) を参照せよ.

前提

ここでは, 以下のような状況を想定している.

RSA 認証の許可の確認

リモートホストの ssh デーモンの設定ファイル (例えば /etc/ssh/sshd_config) において以下のようになっていることを確認.

RSAAuthentication yes

このようになっていないのならば, 下記の方法は不可能である.

ローカルホストへの SSH インストール

SSH のインストール方法に関しては IPA セキュアなWebサーバーの構築と運用 -- 4.2.1 OpenSSHのインストールと設定 を参照せよ.

Debian GNU/Linux の場合

ssh パッケージのインストールにより, 下記で必要とされるソフトウェアは 全てインストールされる.

# apt-get install ssh

RSA 認証の環境構築

秘密鍵, 公開鍵作り

ローカル (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 の内容を貼り付けること.

RSA 認証の接続確認

ssh-agent を起動

ローカルで X を起動し, ssh-agent の後ろにターミナルを起動のコマンド (xterm, kterm, rxvt 等) をくっつけて ssh-agent な (?) ターミナルを起動 する

$ ssh-agent kterm

ssh-add による認証

そのターミナル上で以下のコマンドを入力する.

$ ssh-add

すると, 秘密鍵, 公開鍵作りで入力したパスフレーズを聞かれるので入力する.

Enter passphrase for /home/hero/.ssh/id_dsa: [先ほどのパスフレーズ]
(認証されたら)
Identity added: /home/hero/.ssh/id_dsa (/home/hero/.ssh/id_dsa)

認証

認証後は, そのウィンドウ上, もしくはそのウィンドウ上から起動した ソフトウェアからなら, ノンパスでログインが可能となる.

既に起動後のターミナルから ssh-add で認証を行ないたい場合

既に起動しているターミナルから ssh-add による認証を行ないたい 場合は以下のようにする.

$ eval `ssh-agent -s` ; ssh-add

Agent pid 11335
Enter passphrase for /home/morikawa/.ssh/id_dsa:

ここでパスフレーズを入力することでそのターミナル上からノンパス ログインが可能である.

Emacs + pcl-cvs でノンパスログインするには

RSA 認証されたターミナルを準備

上記で示したように,

$ ssh-agent kterm

と,

$ ssh-add

によってノンパスログインの可能なターミナルを準備する

そのターミナル上から Emacs を起動

あとはそのターミナル上から Emacs を起動するだけである. (フォアグラウンドジョブでもバックグラウンドジョブでも OK).

$ emacs &

Emacs で M-x cvs-update

では, その Emacs 上で M-x cvs-update をやってみよう. リモートリポジトリとのアクセスが可能になっているはずである.

注意

ただし, このアクセスは先の ssh-add をおこなったターミナルによって可能 になっている. バックグラウンドジョブとしてEmacs を起動した場合, Emacs を起動しておきながらターミナルを停止させることは可能だが, それをすると Emacs からリモートリポジトリへのアクセスが不可能になるので注意して欲し い.

Emacs 上で ssh-add による認証を行ないたい場合

ssh-agent.el を用いることで Emacs 独自で RSA 認証を行なうことが可能な ようである. (未調査).

参考資料

  1. OpenSSH 日本語マニュアルページ

    <URL:http://www.unixuser.org/~euske/doc/openssh/jman/>

  2. 簡単 SSH

    <URL:http://www.netlab.is.tsukuba.ac.jp/~one/ssh/>

  3. セキュアなWEBサーバーの構築と運用に関するコンテンツ

    <URL:http://www.ipa.go.jp/security/awareness/administrator/secure-web/>

  4. プログラミング豆知識 Linux 編 pcl-cvs

    <URL:http://icp.hicorp.co.jp/letter/p_mame_l30720.html>

  5. 迷彩記憶 (2004-02-28)

    <URL:http://nabeken.tdiary.net/20040228.html>


Last Updated: 2006/06/26 (森川靖大), Since: 2006/06/26 (森川靖大)