Akio's Log

ソフトウェア開発、プロジェクトマネジメント、プログラミング、ランニングなどなど

自分サーバの構築その15:teraterm+ssh2で公開鍵認証ログイン

Linuxサーバ間で、公開鍵認証+ノンパスワードでのsshログインをする環境は整った。

今度は、WindowsからCentOSサーバにsshログインする際に、公開鍵認証でログインできるように環境を整えてみたい。さらにはノンパスワードでsshログインできるところまでやってみようと思う。

普段Windows上で使用しているターミナルソフトは、定番の「UTF-8 TeraTerm Pro with TTSSH2」である。
SourceForge上のプロジェクトサイトから最新版がダウンロードが可能だ。
SourceForge.jp: Project Info - UTF-8 TeraTerm Pro with TTSSH2

ちなみに、このバージョンのteratermは、ウィンドウを半透明にする事が出来るので、お気に入り。


今回、参考にしたサイトは以下のサイト。


まずはWindows側でteratermの「SSHキー生成」機能を使用して、RSA鍵のペアを作成する。

鍵ペアの生成は、ローカル、リモートのどちらで生成しても良い、との事であるが、リモート側で鍵のペアを生成すると、秘密鍵をローカル側に転送して来なくていけない。せっかく「秘密」な鍵であるので、心情的にもセキュリティ的にもローカルで鍵のペアを生成して、公開鍵をリモート側に転送する、というやり方の方が良さそうな感じがする。

ではまず、ローカル(Windows)側での操作。

  1. teratermを起動し、「新規接続」ダイアログをキャンセルする。
  2. 「設定」メニューから、「SSHキー生成」を選択する。
  3. 「キーの種類」を選ぶ。今回は「RSA」を使用する。
  4. 「生成」ボタンを押して、鍵のパスフレーズを2回入力する。
  5. 「公開鍵の保存」「秘密鍵の保存」ボタンを押して、公開鍵/秘密鍵をローカルのディスク上に保存する。

ここまで完了したら、生成された公開鍵(デフォルトのファイル名は"id_rsa.pub")を、scpなどでリモート側に転送する。


ここからは、リモートサーバであるCentOS上での操作。まずはユーザ側。

  1. Windowsで生成されたローカルの公開鍵を、CentOS上の対象ユーザのauthorized_keysに追記する。ちなみに、ローカルから転送された公開鍵ファイルは、ユーザのホームディレクトリに置いた、という前提で。
  2. authorized_keysファイルのパーミッションを「600」に変更する。
  3. 転送された公開鍵ファイルを削除する。

[hanzawa@remote ~]$ pwd
/home/hanzawa
[hanzawa@remote ~]$ cat id_rsa.pub >> ~/.ssh/authorized_keys
[hanzawa@remote ~]$ chmod 600 ~/.ssh/authorized_keys
[hanzawa@remote ~]$ rm id_rsa.pub

次は、rootにsuしての作業。sshd_configの設定を変更する。変更後はデーモンを再起動。

[root@remote]# vi /etc/ssh/sshd_config
(略)
RSAAuthentication yes
PasswordAuthentication no
(略)
[root@remote]# service sshd restart
sshd を停止中: [ OK ]
sshd を起動中: [ OK ]

「RSAAuthentication」でRSA鍵を有効にする、「PasswordAuthentication」でパスワードでのログインを禁止する、の2点。

これで、リモートサーバ側の設定は完了。再びWindows上のteratermの設定に戻る。

  1. teratermを起動し、新規接続画面で「TCP/IPホスト」に接続先アドレスを入力して「OK」
  2. RSA/DSA鍵を使う」を選択して、秘密鍵ファイルをファイル選択ダイアログで指定する。
  3. ユーザ名と、秘密鍵パスフレーズを入力する。ユーザのリモート先のアカウントパスワードではなく、秘密鍵パスフレーズ
  4. 「OK」ボタンを押すと、無事ログイン出来る。


公開鍵認証を使用して、teratermからsshログインする事が出来た。



しかし、このままだと、毎回毎回RSA鍵ファイルを指定して、さらにパスフレーズを入力しなければいけなくなるので、パスワード認証のときよりも、かなり手間が増えてしまった。

これを解決するには、teratermの「TeraTermMenu」というアプリケーションを使用すれば、鍵ファイルを設定しておいて、ワンクリックでリモート側にログインする事が出来る。もちろん、パスフレーズの入力なしで。


続きを書こうと思ったけども、お腹が減ったので中断。続きは明日書く。

------------------------------------------------------------
2007/6/21 追記

昨日の続きで、teratermmenuの設定も書いておく。

こちらのサイトに詳しい記述がある。

UTF8対応版のteratermには、teraterm menuというタスクトレイに常駐するアプリが同梱されており、デフォルトのインストールではスタートメニューに登録される。起動していない場合は、インストールディレクトリにあるttpmenu.exeを起動する。

私の場合は、インストールディレクトリ「C:\Program Files\teraterm」以下に「ttpmenu.exe」があった。

このアプリケーションを起動すると、タスクトレイにアイコンが出現するので、右クリック⇒「リスト編集」でホスト名などを登録する画面が出てくる。

  1. 「登録名」には任意の名前を入力
  2. 「自動ログイン」を選択し、「ホスト名」にはリモートサーバのアドレスを入力する。
  3. 同じく、「ユーザ名」には、リモートサーバのユーザ名を入力する。
  4. 「パスワード」には、ユーザのパスワードではなく、次に登録する「秘密鍵」のパスフレーズを入力する。
  5. 下の「ttsshを使う」にチェックを入れ、「キー」の隣のボタンをクリックして、RSA鍵ペアの秘密鍵ファイルの場所を指定する。
  6. 最後に、画面真ん中あたりの左向きの矢印ボタンをクリックすると、画面左の「リスト項目」に設定内容が登録される。

ここまで出来たら画面を閉じる。

後は、タスクトレイのアイコンを左クリックすると、先ほど編集したリモートサーバの名前が出てくるので、それを選択する。teratermの画面が開き、パスワードを入力する事なく、リモートサーバへログインする事が出来る。


毎回、ttpmenu.exeを起動するのが面倒臭いので、Windowsのスタートアップに登録しておけば、より便利。


これで非常に快適な生活が送れる(!?)ようになりました。めでたしめでたし。