2008年3月5日水曜日

TeraTermからSSH2で公開鍵認証

●Windowsから公開認証鍵を利用する

ググったら、出来ない君な設定方法が多いので、この通りやったら絶対できるはず
というテキストをメモ代わりに置いておきます。

動作検証は以下の通りな感じ
SentOS5
 openssh-4.3p2-24.el5
 openssh-server-4.3p2-24.el5
 openssh-clients-4.3p2-24.el5

RedHat EL4/WS3
 openssh-server-3.6.1p2-33.30.14
 openssh-3.6.1p2-33.30.14
 openssh-clients-3.6.1p2-33.30.14



まずは、telnetクライアントソフトを用意しましょう。

・UTF-8 TeraTerm Pro with TTSSH2  4.58 2008-02-29 22:16
http://sourceforge.jp/projects/ttssh2/

いろいろありますが、TeraTerm がお勧めです。っていうかコレ以外ダメです。
しかし、上記以外から TeraTerm 落としてきて「SSH2で接続できません!」などと、のたまわれても
サポート出来ません。ちょっと前のだと 1.5 までしか対応してません。

あと最近主流になってきた PuTTY も無理です。理由は名前が卑猥だからです。



1.鍵の作成

Linuxサーバ側で鍵を作成します。 (鍵ペアを作るだけなので、OpenSSHに準拠(略)ならどこでも良い)

[root99@~/.ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/root99/.ssh/id_rsa): <エンター>
Enter passphrase (empty for no passphrase): root99hoge (実際には見えない)
Enter same passphrase again: root99hoge (実際には見えない)
Your identification has been saved in /home/root99/.ssh/id_rsa.
Your public key has been saved in /home/root99/.ssh/id_rsa.pub.
The key fingerprint is:c5:e0:fc:1b:94:f5:f4:89:7e:64:da:3f:39:cb:b9:91 root99@server

水色の部分はパスフレーズです。ログインのパスワードとは別物なんですが、分からなければ
まぁ、パスワードみたいなもんなので好きに決めて下さい。
これで鍵ペアが作成できました。


[root99@server ~/.ssh]# ls -lartF
drwxr-x--- 6 root99 root99 4096 2月 10 14:43 ../
-rw-r--r-- 1 root99 root99 239 12月 27 21:23 known_hosts
-rw------- 1 root99 root99 391 3月 5 06:14 id_rsa.pub
-rw------- 1 root99 root99 1743 3月 5 06:14 id_rsa
drwx------ 2 root99 root99 4096 3月 5 06:14 ./

こんな風になってますか?なってなければ
# chmod 600 id_rsa.pub id_rsa
しといて下さいね。



これからやりたいことは、

クライアントA -----SSH接続---→ サーバ
Aの秘密鍵                Aの公開鍵は認証済みの状態

という風にしたいわけです。 さっき作成したファイルで言うと
id_rsa     秘密鍵
id_rsa.pub 公開鍵
という組み合わせです。
ですので id_rsa ファイルはクライアント側で使用する物ですので、サーバで鍵ペアを作った場合は
ダウンロードして、クライアントの TeraTermフォルダにでも入れておいて下さい。
ダウンロードし終わったらサーバ側の id_rsa ファイルは削除しておきましょう。
他人に盗まれたらせっかく認証鍵を作った意味が無いですからね。


2.サーバへの認証
先ほどの公開鍵をサーバ側で認証済みの状態にするにはどうすれば良いかというと
ユーザーディレクトリの下、つまり /home/root99/.ssh/authorized_keys に記述を追加することで
可能です。
既存ファイルが無い場合は新しく作ってもいいですが
# mv /home/root99/.ssh/id_rsa.pub  /home/root99/.ssh/authorized_keys
としても同じことですね?
アクセス権が
-rw------- 1 root99 root99 221 3月 5 04:46 authorized_keys
となっていることを確認して下さい。



3.TeraTermの設定
TeraTerm を起動して [Setup] → [SSH Authentication...] を選択
User name: にログインアカウントを入力。
[Use RSA/DSA key to log in]ボタンにチェックを入れ、先ほどの[id_rsa]を選択して下さい。
[OK]ボタンを押し、
[Setup] → [Save setup...]で、TERATERM.ini ファイルを保存しておきましょう。
ちなみに、ini ファイル名は何でも構いませんので、サーバが複数ある場合は分けて作成しても
良いでしょう。


4.sshd_configの編集
これまでは一般ユーザの権限で作業していましたが、次はroot権限で作業します。

# vi /etc/ssh/sshd_config
#必ずする設定
RSAAuthentication yes #RSA認証を使う
PubkeyAuthentication yes #公開認証鍵を使う
PasswordAuthentication no #パスワードを使用しない(パスフレーズを使用する)
AuthorizedKeysFile .ssh/authorized_keys #ここのファイル名と合わせること!

#あった方が良い設定
PermitRootLogin no #rootでのログインを許可しない
ChallengeResponseAuthentication no #チャレンジレスポンス認証を許可しない
PermitEmptyPassword no #パスワード無しを許可しない
RhostsRSAAuthentication no #サーバ間のパス無しアクセスを許可しない
IgnoreRhosts yes #サーバ間のパス無しアクセスを許可しない
HostbasedAuthentication no #特定のホストのパス無しアクセスを許可しない
IgnoreUserKnownHosts yes #拒否するホストを設定するかもしれない


sshdを再起動して反映する
# service sshd restart または # /etc/init.d/sshd restart
としてサービスの再起動をします。
ちなみに、初心者の方は
「ssh でつないで作業してる時にサービス再起動していいのだろうか?」
と心配するかも知れませんが、今現在繋がってるセッションは維持されますので
サービスを停止したとしても大丈夫です。

[root@server /home/root]# /etc/init.d/sshd restart
sshd を停止中: [ OK ]
sshd を起動中: [ OK ]

正常に起動できたら、[ OK ] となるはず。これでサーバ側の設定も完了しました。
クライアントから接続できるか確認してみて下さい。

TeraTerm からのアクセスの場合は
TCP/IP Host:[ hoge.example.com ]
Service ●SSH SSH version: [ SSH2 ]
の状態で [OK] ボタンを押すと、先ほどの id_rsa キーを設定した画面が出てきますので、
認証鍵のペアを作成した時に入力したパスフレーズを
Passphrase: [ ] に入力します。 今回の例だと root99hoge
●Use RSA/DSA key to log in Private key file [ id_rsa ]
とチェックが入っていることを必ず確認して下さい。

他の Unix クライアントからアクセスする場合は
# ssh -i /home/hoge/id_rsa serverB.example.com -l root99
として、秘密鍵とユーザ名の指定をします。



※おまけ   TeraTermマクロの書き方 例(root99.ttl ) 
;Macroココカラ============================================
username = 'root99' ;ログインユーザ名
hostname = 'xxx.xxx.xxx.xxx' ;サーバのIPアドレス
LinuxPrompt = 'root99' ;ログインに成功した時に表示される文字列
PasswordPrompt = 'パスワード:' ;パスワードを要求される時に表示される文字列
getpassword 'password.dat' 'passwordROOT99' PasswordROOT99

msg = hostname
strconcat msg ':22 /ssh /KR=UTF8 /KT=UTF8 /F=TTERM001.INI /keyfile=id_rsa /auth=publickey /user='
strconcat msg username
strconcat msg ' /passwd='
strconcat msg PasswordROOT99
connect msg
settitle 'hoge.example.jp'

wait LinuxPrompt
sendln 'su -' ;自動的にrootになりたければここから下も記述
wait PasswordPrompt
getpassword 'password.dat' 'passwordROOT' PasswordROOT
sendln PasswordROOT

sendln "cd /home/root/"
sendln "alias ll='ls -lartF --color=none'"

;Macroココマデ============================================


完成したら root99.ttl アイコンをWクリックしてみましょう。
一番最初の実行時のみパスワードを聞いてきます。
(もし入力に失敗したら、TeraTermディレクトリのpassword.datの中の該当行を削除)
自動的に接続して ROOT にまでなれたら成功。

1 件のコメント:

匿名 さんのコメント...

「teraterm マクロの書き方」
とかでググると、自称素人と言ってる
質問者に対して、自分も知らないのに
適当なこと教えてる暇人が多いなー。
Password = 'hoge2'
なんて素でTextに書いちゃ駄目ですぜ奥さん!

.