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

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

sshプロトコルにはバージョン1とバージョン2がありますが、 バージョン1にはすでに脆弱性が発見されています。ところが、 従来からWindowsでよく使われて来た TeraTerm (およびその 日本語版 )用のプラグインである TTSSH (およびその 日本語版 )では、 sshプロトコルのバージョン1までしかサポートされていませんでした(*1)。

(*1) 現在は ssh2 にも対応しているようです。

今回ご紹介する PuTTY (およびその 日本語版 )では、sshプロトコルバージョン2がサポートされましたので、 比較的安心して使用することができるようになりました。 以下にインストールと設定方法について記述します。なお、 すでに openssh サーバ(sshd)が動作中の Vine Linux 2.6β マシンに接続 することを想定しています。

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

  1. アーカイブの取得と展開

    まず、 PuTTY オリジナルサイト やその ミラーサイト から putty.zip をダウンロードし、適当な場所(ここでは C:\Program Files\putty とします) に展開します。なお、オリジナルでは日本語が通らないらしいので、 日本語対応されたバージョンである puttykjbin.zip をダウンロードし、puttyと同じ場所に上書きで展開します。

    参考までに、以下のようなファイルが展開されます(実行ファイルのみ記載)。

    1 pageant.exe PuTTY, PSCP, Plink 用 SSH 認証エージェント (パスフレーズ入力代行プログラム)
    2 plink.exe PuTTY バックエンドへのコマンドライン・インターフェース
    3 pscp.exe SCP クライアント(コマンドライン用の安全なファイルコピー)
    4 psftp.exe SFTP クライアント(FTP によく似たファイル転送プログラム)
    5 putty.exe Telnet/SSH クライアントの本体(日本語環境では文字化けする)
    6 puttygen.exe RSA ,DSA キー生成ユーティリティ
    7 puttyjp.exe putty.exe の日本語処理対応版

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

    早速、上記ディレクトリにある puttyjp.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. 公開鍵暗号化方式による認証

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

    キーペアは Windows 側で作ります。(SSHサーバ機側で作る方法間あります)

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

    putty7 - puttygen.exe

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

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

    PuTTY - puttygen.exe - 2

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

    なお、パスフレーズを入力せずに使うこともできます。その場合、 ログイン時にパスワードを要求されなくなります。一見便利ですが、 秘密キーを盗まれた場合、誰でもログインできてしまいます。

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

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

    これらのキーペアを有効にするには、 接続先の ssh サーバに自分の公開鍵を登録してやらなければなりません。

    公開鍵はサーバのユーザホームディレクトリ直下の .ssh サブディレクトリに保存します。 このディレクトリが存在しない場合は、前もって mkdir コマンドで作成しておきます。

    フロッピーで運んだり、FTPで転送します。

      参考のため、前述の pscp.exe を使った転送方法です。

        C:\Program Files\putty>pscp id_dsa.pub server1:.ssh/id_dsa.pub
        hotta's password:
        id_dsa.pub | 0 kB | 0.3 kB/s | ETA: 00:00:00 | 100%

        正しくコピーされたことを Linux/Unix 側で確認します。

        hotta@server1 ~$ ls -l .ssh/id_dsa.pub
        -rwxr--r-- 1 hotta hotta 294 Sep 30 18:11 .ssh/id_dsa.pub*

    コピーした公開鍵を、自分自身の公開鍵リストに追加します。

    hotta@server1 ~$ cd .ssh
    1台目の場合は
    hotta@server1 ~/.ssh$ ssh-keygen -i -f id_dsa.pub > authorized_keys

    2台目以降の場合は
    hotta@server1 ~/.ssh$ ssh-keygen -i -f id_dsa.pub >> authorized_keys

    PuTTY を設定する。

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

    「認証」ウィンドウ

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

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

    publickey

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

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

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

    #PasswordAuthentication yes

    PasswordAuthentication no

    に変更し、

    # /etc/init.d/sshd restart

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

戻る