☆ [SSH] ssh-agent と ssh-add で non-pass login!! ☆ ノンパスログインは .shosts を利用する方法もありますが、少しセキュリティ の堅いサーバなどではこの方法は使えません。 そんな時には秘密鍵・公開鍵による RSA 認証を使うと良いかも知れません。 以下にその方法を簡単に紹介します。 ■ 目次 ・ 準備 - リモートサーバ /etc/ssh/sshd_config の設定確認 - パスフレーズを考えよう - 秘密鍵・公開鍵作り - 鍵の配置 ・ 使い方 - ssh-agent (認証準備) - ssh-add (認証) ・ サードパーティツール - ssh-agent.el [in Emacs] ■ 準備 □ リモートサーバ /etc/ssh/sshd_config の設定確認 リモートホストの /etc/ssh/sshd_config において 以下のようになっていることを確認. RSAAuthentication yes □ パスフレーズを考えよう パスワードのように短い文字に限られないので、 長くて忘れない文章を考えましょう (空白も入れられます)。 □ 秘密鍵・公開鍵作り 以下のコマンドで鍵を作る $ 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 □ 鍵の配置 ◆ 秘密鍵の置場 普通に使うなら、先に生成した場所と同じで OK 。 (つまり移動しなくて良いよ)。 ◆ 公開鍵をリモートホストに置く リモートホストに公開鍵を置く。 scp ならば暗号化されているので, とりあえず OK とする。 $ scp /home/hero/.ssh/id_dsa.pub foo.ne.jp:~/.ssh/authorized_keys 上記のようにリモートホストの置場は ~/.ssh で、ファイル名は authorized_keys とします。 ■ 使い方 □ ssh-agent (認証準備) 認証コマンド ssh-add を用いるためには、ターミナルの起動時などに ssh-agent を起動しておく必要がある ◆ ターミナルの起動時に指定 まず、ターミナルや X の起動時に ssh-agent をつける方法がある。 $ ssh-agent kterm $ ssh-agent startx ターミナルにつければそのターミナル上で、startx につけるなら その X 上で ssh-add による認証が可能になる。 ◆ 既に起動しているターミナル上での起動 $ eval `ssh-agent -s` のようにコマンドすることで、そのターミナルを ssh-agent で 起動したのと同じ状態に出来る。 ※ 僕は下記の ssh-add とを同時に行なうため、.bashrc に以下の ように記述してます。 alias ssh-add-sh='eval `ssh-agent -s` ; ssh-add' □ ssh-add (認証) ssh-add は ssh-agent で立ち上げられた X, またはターミナルで使用 されることによって、$HOME/.ssh/identity を記憶し、パスフレーズ入 力を一回で済ませ、それ以降はノーパスでログインするためのものであ る。上記で用意したターミナル or X 上で ssh-add コマンドを入力する。 $ ssh-add とすると、「Enter passphrase for /home/morikawa/.ssh/id_dsa:」 のようなメッセージが返りパスフレーズを聞かれるので入力する。 そして、「Identity added: /home/morikawa/.ssh/identity」 と返事が返って来たら OK。 これ以降は X 画面、またはそのターミナルではパスフレーズやパスワー ドを聞かれずにログインすることができる。 ちなみにこの方法は、パスワードを使用していないので一見危険なように見え るかも知れませんが、通信経路はちゃんと暗号化されており、なおかつパスフ レーズもネットワークに流れないので、むしろ平文パスワード認証より安全で す。 ■ サードパーティツール ssh-agent にまつわるサードパーティツールを紹介します。 □ ssh-agent.el Emacs 上で ssh-agent を使うための Emacs Lisp で、 以下で公開されています。 http://glozer.net/code.html#ssh-agent これにより、Emacs のプロセス単体で ssh-agent を利用する ことが可能です。なお、これを用いない場合、Emacs で ssh-agent によるノンパスログインを可能にしようと思ったら、 ・ emacs を ssh-add したターミナルで立ち上げなければならない。 - しかもそのターミナルを落すと ssh-add の効果が消滅するので 落せない ・ X を ssh-agent で起動する - ちょっと怖いか…? といった手法があります。これらが不便だなぁ…。と感じた場合には ssh-agent.el を使ってみるのも良いのでは?