PuTTYでssh2プロトコルを使ってssh接続

PuTTY は Windows で動作する telnet/ssh クライアントプログラムです。 telnet によるリモートコンピュータへの接続ではパスワードが暗号化されませんので、 現在 telnet をお使いの方は、 速やかに ssh(暗号化シェル)に移行することを お勧めします。

なお、以下の記述の中の 'server1' は、お使いの sshd サーバのサーバ名または IP アドレスに読み替えてください。

  1. インストール

    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 アンインストーラ


  2. パスワード認証による接続

    早速、上記ディレクトリにある putty.exe を起動し、 パスワード認証による ssh2 接続を行ってみましょう。

    putty - セッション

    ここでは接続先ホストのホスト名または IP アドレスを入力し、 プロトコルとして SSH を選択しておきます。 次に接続をクリックします。

    putty - 接続

    この画面では「自動ログインのユーザ名(U)」を設定しておきます。 ここでは設定せずに、telnet と同じように毎回問い合わせに対して 手動でユーザ名を入力することもできます。

    次に「SSH」をクリックします。

    putty - SSH

    「優先する SSH プロトコルバージョン」を 2 にしておきます。

    ここで接続する前に、これらの設定を保存しておきましょう。 「セッション」画面で「保存されたセッション」に適当な名前 (接続しようとしているホスト名でよいでしょう)を入力し、 「保存(S)」をクリックします。 次回からはこの名前が下のリストに追加されるので、 これを指定して「読込」ボタンで設定を呼び出せるようになります。

  3. 警告ダイアログの表示

    「開く」を押すと、初めて接続するホストの場合、 以下のような警告ダイアログが表示されます。

    putty - Security Alert

    サーバのホストキーがクライアント側に登録されていない場合、本当に そのサーバに接続してよいのか(そのサーバを信用するのか)を聞いて来 ます。「はい(Y)」をクリックすると、該当ホストのホストキーをローカル キャッシュに保存すると同時に、該当ホストへの接続を試みます。

  4. パスワード認証による接続

    接続がうまくゆけば、以下のコンソール画面が開き、 指定したユーザのパスワードを聞いて来ます。 正しいパスワードを入力すると、 該当ユーザとしてのセッションが開始されます。

    もしウィンドウが消えてしまうようであれば、 おそらく sshd 側でパスワード認証が許可されていないためです。 もし可能であれば、サーバ側の /etc/ssh/sshd_config の

    PasswordAuthentication no

    PasswordAuthentication yes

    に変更し、

    # /etc/init.d/sshd restart

    で sshd を再起動して、パスワード認証を許可してください。

    putty - セッション開始

    これで 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

  5. 公開鍵暗号化方式による認証

    この状態(平文によるパスワード認証)でもパスワードや通信データは正しく 暗号化されていますが、所詮パスワード認証なので、 サーバで他のホストからのアクセスを許している場合、 パスワードさえマッチすれば他人がログインできる可能性が残ります。 そこで公開鍵暗号化方式による認証方式に切替えましょう。

    ssh では public(公開鍵) / private(秘密鍵) というキーのペアを使って 認証を行います。キーペアは Windows 側で新たに作ることもできますし、 Linux 側で使っている openssh のキーを流用することもできます。まずは、 openssh のキーを使う方法を説明します。まだ openssh の鍵を持っていない方は、 後述の「Windows 側でキーペアを作成する」を参照してください。

  6. 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 を起動します。

    puttygen.exe 初期画面

    Load ボタンを押して「ファイルの種類」を「All Files」にし、 先ほど受信した id_dsa を指定します。 元の秘密キーにパスフレーズ(より安全で長めのパスワード)が設定されている場合には、 下のようなダイアログが表示されます。

    パスフレーズ入力ダイアログ

    パスフレーズを入力して OK を押すと、 次のようなメッセージが表示されるので OK で閉じます。

    パスフレーズ入力OK

    下の方にある type of key to generate に「SSH2 DSA」を選択して 「Save private key」を押し、ファイル名に元と同じ id_dsa を指定すると、 PuTTY 用の秘密キーである id_dsa.PPK が生成されます。

    次に putty.exe を起動し、「ホスト名」のところに既にこの秘密鍵に対応する 公開鍵が登録してあるサーバのホスト名を入力します。

    「SSH - 認証」をクリックすると、以下の画面が開きます。

    SSH - 認証

    「認証のためのプライベートキーファイル」のところで、 今作成した id_dsa.PPK を指定し、 「セッション」に戻って適当な名前で保存します。

    「接続」すると、パスフレーズの入力を求められます。 正しいパスフレーズを入力すると、無事サーバに接続できます。

    imported-key による接続

  7. Windows 側でキーペアを作成する

    次に、Windows 側で新たにキーペアを作る方法について説明します。 まず PuTTY と同じディレクトリにある puttygen.exe を起動します。 キーのタイプで SSH2_RSA を選択して「Generate」ボタンを押します。

    putty7 - puttygen.exe

    乱数の生成が始まります。 プログレスバーの下の空白のエリアでマウスをぐりぐりと動かすことにより、 よりよい乱数を生成します。

    その後キーペアの生成が行われ、終了後以下の画面になります。

    PuTTY - puttygen.exe - 2

    「Key passphrase」に、これらのキーペアに対するパスフレーズを入力します。 ここで入力したパスフレーズは、Linux/Unix のログインパスワードとはまったく別の、 ssh 固有のものです。さらに、 「Confirm passphrase」にも確認のために同じパスフレーズを入力します。

    なお、パスフレーズを入力せずに使うこともできます。その場合、 ログイン時にパスワードを要求されなくなります。

    「Save public key」および「Save private key」で、 それぞれ公開鍵と秘密鍵をファイルにセーブします。 名前はなんでも構いませんが、 ここではid_rsa.pub(公開鍵) と id_rsa.ppk(秘密鍵) という名前で、 PuTTY と同じディレクトリにセーブしたものとします。 作業が終わったら、ウィンドウ右上の×を押してダイアログを閉じます。

  8. 公開鍵の転送とサーバへの登録

    これらのキーペアを有効にするには、 接続先の 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

  9. クライアント側への秘密鍵の登録

    最後に、PuTTY 側に秘密鍵を登録します。

    新たに putty.exe を起動し、 初期画面(セッション)で先ほど保存したセッション名を選び、 「読込」をクリックします。セッションが復元されたら「認証」をクリックし、 以下の画面となります。

    「認証」ウィンドウ

    「参照」ボタンで秘密鍵として保存した id_rsa.PPK を選びます。 「セッション」に戻り、現在の状態を再度[保存」します。

    次に「開く」を押し、秘密鍵のパスフレーズを入力することで、 めでたく公開鍵方式によるログインができました。 サーバのログで、ちゃんと publickey を受け入れているのがわかります。

    publickey

  10. パスワード認証を無効にする

    ここまでの設定がうまくいき、 公開鍵暗号化方式によるログインができるようになったら、 安全のためにサーバ側ではパスワード認証を無効にしておきましょう。

    サーバ側の /etc/ssh/sshd_config の

    #PasswordAuthentication yes

    PasswordAuthentication no

    に変更し、

    # /etc/init.d/sshd restart

    で sshd を再起動します。これ以降はパスワード認証が認められなくなります。

戻る