PuTTY は Windows で動作する telnet/ssh クライアントプログラムです。 telnet によるリモートコンピュータへの接続ではパスワードが暗号化されませんので、 現在 telnet をお使いの方は、 速やかに ssh(暗号化シェル)に移行することを お勧めします。
なお、以下の記述の中の 'server1' は、お使いの sshd サーバのサーバ名または IP アドレスに読み替えてください。
PuTTY ごった煮版
にある「インストーラ」をダウンロードして起動します。
インストール先は、デフォルトの "c:\Program Files\putty" として話を進めます。
参考までに、以下のようなファイルが展開されます(実行ファイルのみ記載)。
1 | pageant.exe | PuTTY, PSCP, Plink 用 SSH 認証エージェント (パスフレーズ入力代行プログラム) | 2 | pfwd.exe | ポートフォワーダ |
3 | plink.exe | PuTTY バックエンドへのコマンドライン・インターフェース |
4 | plinkw.exe | plink.exe の非ウィンドウ版 |
5 | pscp.exe | SCP クライアント(コマンドライン用の安全なファイルコピー) |
6 | psftp.exe | SFTP クライアント(FTP によく似たファイル転送プログラム) |
7 | putty.exe | Telnet/SSH クライアントの本体(日本語環境では文字化けする) |
8 | puttygen.exe | RSA キー生成ユーティリティ |
9 | unins000.exe | アンインストーラ |
早速、上記ディレクトリにある putty.exe を起動し、 パスワード認証による ssh2 接続を行ってみましょう。
ここでは接続先ホストのホスト名または IP アドレスを入力し、 プロトコルとして SSH を選択しておきます。 次に接続をクリックします。
この画面では「自動ログインのユーザ名(U)」を設定しておきます。 ここでは設定せずに、telnet と同じように毎回問い合わせに対して 手動でユーザ名を入力することもできます。
次に「SSH」をクリックします。
「優先する SSH プロトコルバージョン」を 2 にしておきます。
ここで接続する前に、これらの設定を保存しておきましょう。 「セッション」画面で「保存されたセッション」に適当な名前 (接続しようとしているホスト名でよいでしょう)を入力し、 「保存(S)」をクリックします。 次回からはこの名前が下のリストに追加されるので、 これを指定して「読込」ボタンで設定を呼び出せるようになります。
警告ダイアログの表示
「開く」を押すと、初めて接続するホストの場合、 以下のような警告ダイアログが表示されます。
サーバのホストキーがクライアント側に登録されていない場合、本当に そのサーバに接続してよいのか(そのサーバを信用するのか)を聞いて来 ます。「はい(Y)」をクリックすると、該当ホストのホストキーをローカル キャッシュに保存すると同時に、該当ホストへの接続を試みます。
パスワード認証による接続
接続がうまくゆけば、以下のコンソール画面が開き、 指定したユーザのパスワードを聞いて来ます。 正しいパスワードを入力すると、 該当ユーザとしてのセッションが開始されます。
もしウィンドウが消えてしまうようであれば、 おそらく sshd 側でパスワード認証が許可されていないためです。 もし可能であれば、サーバ側の /etc/ssh/sshd_config の
PasswordAuthentication no
をPasswordAuthentication yes
に変更し、# /etc/init.d/sshd restart
で sshd を再起動して、パスワード認証を許可してください。
これで sshd に接続されました。メニューがなくて殺風景ですが、 タイトルバーの上で右クリックすると、ちゃんとメニューが出ます。
ここでサーバのログを見てみると、 正しく ssh2 で接続されたことがわかります。
hotta@server1 ~$ sudo tail -1 /var/log/secure Password: Sep 30 17:20:13 server1 sshd[3458]: Accepted password for hotta from 192.168.0.219 port 1083 ssh2 |
公開鍵暗号化方式による認証
この状態(平文によるパスワード認証)でもパスワードや通信データは正しく 暗号化されていますが、所詮パスワード認証なので、 サーバで他のホストからのアクセスを許している場合、 パスワードさえマッチすれば他人がログインできる可能性が残ります。 そこで公開鍵暗号化方式による認証方式に切替えましょう。
ssh では public(公開鍵) / private(秘密鍵) というキーのペアを使って 認証を行います。キーペアは Windows 側で新たに作ることもできますし、 Linux 側で使っている openssh のキーを流用することもできます。まずは、 openssh のキーを使う方法を説明します。まだ openssh の鍵を持っていない方は、 後述の「Windows 側でキーペアを作成する」を参照してください。
openssh の鍵を利用する
すでに Linux/Unix で ssh(openssh) を使っており、 ssh-keygen で作成した自分自身の認証キーを持っている場合は、 これを PuTTY で使えるようにインポートしましょう。なおこの機能は、 PuTTY 0.53 より可能になりました。
id_rsa.pub をフロッピーなどでやりとりしてもよい(というか、こちらが本筋です) のですが、ここでは pscp.exe を利用してみましょう。 pscp.exe は、ssh プロトコルでファイルのコピーを行うツールです。
コマンド・プロンプトを開き、以下の要領でファイルを転送します。 まだ接続はパスワード認証になっていますので、 パスワードには通常の Linux のログインパスワードを入力します。
C:\Program Files\putty>pscp -p server1:.ssh/id_dsa . hotta@server1's password: id_dsai | 0 kB | 0.7 kB/s | ETA: 00:00:00 | 100% C:\Program Files\putty>dir id_dsa ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は D018-F91C です C:\Program Files\putty のディレクトリ 2002/03/22 18:36 736 id_dsa 1 個のファイル 736 バイト 0 個のディレクトリ 2,320,707,584 バイトの空き領域 |
次に、puttygen.exe を起動します。
Load ボタンを押して「ファイルの種類」を「All Files」にし、 先ほど受信した id_dsa を指定します。 元の秘密キーにパスフレーズ(より安全で長めのパスワード)が設定されている場合には、 下のようなダイアログが表示されます。
パスフレーズを入力して OK を押すと、 次のようなメッセージが表示されるので OK で閉じます。
下の方にある type of key to generate に「SSH2 DSA」を選択して 「Save private key」を押し、ファイル名に元と同じ id_dsa を指定すると、 PuTTY 用の秘密キーである id_dsa.PPK が生成されます。
次に putty.exe を起動し、「ホスト名」のところに既にこの秘密鍵に対応する 公開鍵が登録してあるサーバのホスト名を入力します。
「SSH - 認証」をクリックすると、以下の画面が開きます。
「認証のためのプライベートキーファイル」のところで、 今作成した id_dsa.PPK を指定し、 「セッション」に戻って適当な名前で保存します。
「接続」すると、パスフレーズの入力を求められます。 正しいパスフレーズを入力すると、無事サーバに接続できます。
Windows 側でキーペアを作成する
次に、Windows 側で新たにキーペアを作る方法について説明します。 まず PuTTY と同じディレクトリにある puttygen.exe を起動します。 キーのタイプで SSH2_RSA を選択して「Generate」ボタンを押します。
乱数の生成が始まります。 プログレスバーの下の空白のエリアでマウスをぐりぐりと動かすことにより、 よりよい乱数を生成します。
その後キーペアの生成が行われ、終了後以下の画面になります。
「Key passphrase」に、これらのキーペアに対するパスフレーズを入力します。 ここで入力したパスフレーズは、Linux/Unix のログインパスワードとはまったく別の、 ssh 固有のものです。さらに、 「Confirm passphrase」にも確認のために同じパスフレーズを入力します。
なお、パスフレーズを入力せずに使うこともできます。その場合、 ログイン時にパスワードを要求されなくなります。
「Save public key」および「Save private key」で、 それぞれ公開鍵と秘密鍵をファイルにセーブします。 名前はなんでも構いませんが、 ここではid_rsa.pub(公開鍵) と id_rsa.ppk(秘密鍵) という名前で、 PuTTY と同じディレクトリにセーブしたものとします。 作業が終わったら、ウィンドウ右上の×を押してダイアログを閉じます。
公開鍵の転送とサーバへの登録
これらのキーペアを有効にするには、 接続先の ssh サーバに自分の公開鍵を登録してやらなければなりません。 前述の pscp.exe を使って、公開鍵 id_rsa.pub をサーバ側に転送します。
公開鍵はサーバのホームディレクトリ直下の .ssh サブディレクトリに保存します。 このディレクトリが存在しない場合は、前もって mkdir コマンドで作成しておきます。
C:\Program Files\putty>pscp id_rsa.pub server1:.ssh/id_rsa.pub
hotta's password:
id_rsa.pub | 0 kB | 0.3 kB/s | ETA: 00:00:00 | 100%
正しくコピーされたことを Linux/Unix 側で確認します。
hotta@server1 ~$ ls -l .ssh/id_rsa.pub
-rwxr--r-- 1 hotta hotta 294 Sep 30 18:11 .ssh/id_rsa.pub*
コピーした公開鍵を、自分自身の公開鍵リストに追加します。
hotta@server1 ~$ cd .ssh
hotta@server1 ~/.ssh$ ssh-keygen -i -f id_rsa.pub >> authorized_keys2
クライアント側への秘密鍵の登録
最後に、PuTTY 側に秘密鍵を登録します。
新たに putty.exe を起動し、 初期画面(セッション)で先ほど保存したセッション名を選び、 「読込」をクリックします。セッションが復元されたら「認証」をクリックし、 以下の画面となります。
「参照」ボタンで秘密鍵として保存した id_rsa.PPK を選びます。 「セッション」に戻り、現在の状態を再度[保存」します。
次に「開く」を押し、秘密鍵のパスフレーズを入力することで、 めでたく公開鍵方式によるログインができました。 サーバのログで、ちゃんと publickey を受け入れているのがわかります。
パスワード認証を無効にする
ここまでの設定がうまくいき、 公開鍵暗号化方式によるログインができるようになったら、 安全のためにサーバ側ではパスワード認証を無効にしておきましょう。
サーバ側の /etc/ssh/sshd_config の
#PasswordAuthentication yes
をPasswordAuthentication no
に変更し、# /etc/init.d/sshd restart
で sshd を再起動します。これ以降はパスワード認証が認められなくなります。