PuTTY で SSH2プロトコルを使うぞ 接続に関するメモ (2003/03/27, 更新日:2003/11/06) 
 

PuTTY とは?

PuTTY は SSH1/SSH2 に対応したターミナルプログラムで、同様の有名所では「TeraTerm + TTSSH」なんかもあります。なにをするもんかと言うと、サーバとの接続 telnet(23) では、ID / PASSWORD や接続中の送受信文字列が暗号化されていないため、スニフィング(盗聴)された場合に全ての情報が丸見えとなってしまうのを、SSHプロトコルを使用することにより暗号化し、スニフィング(盗聴)されても簡単には解析できないようにするためのものです。とーぜん ID / PASSWORD も暗号化されます。

SSHプロトコルには、SSH1(バージョン1)と SSH2(バージョン2)があり、SSH1 には、多くの脆弱性が発見/暗号強度において問題が指摘されています。で、SSH2 を使用するのが現時点ではベストなのですが、対応するターミナルプログラムが無かったとというのが悔しいところで・・・・(TTSSH は、未対応?)。なわけで、SSH1/SSH2 に対応している PuTTY を使ってみることとします。

でもって、SSH2(DSA)の方が良いという方もいるんですけど、SSH1 ←→ SSH2 との鍵運用を考慮して SSH2(RSA) でいくことにします。※ RSAは、だめだよぉ。っていう方・・・連絡もとむ!

本家 : PuTTY: A Free Win32 Telnet/SSH Client

参考 : PuTTY で ISO 2022 による日本語入力・表示を可能にするパッチ

 

まずは、ダウンロード

PuTTY 本家のページにいくと、色々なツールがありますが、「PuTTY.exe」本体のみで ok なのでダウンロードしましょう〜〜。でもって英語嫌いな私は、日本語パッチの方もダウンロードしてみたりして。あはははは。

サーバとの接続に関しての参考サイト・・・・

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

 参考 : PuTTYによるWindows上でのSSH接続: 

SSH2 による接続その1(秘密鍵認証=no, パスワード認証=yes

1) サーバ側の /usr/local/etc/sshd_config 内容を下記の様に設定します。

Protocol 2                  ← ssh2(Protocol 2)のみとします
PasswordAuthentication yes  ← yes にすると、テキスト認証が可能です
RSAAuthentication no        ← 秘密鍵認証を無効にします

2) "puttyjp.exe"を実行し、必要な項目を設定します。特に、「終了時のウィンドウクローズ」の設定で”しない”を選択しておくと、サーバ接続できなかった場合の問題解決になるので有効です。

3) カテゴリ−SSHタグを選択し、「優先するSSH プロトコルバージョン」の設定で”2 only”を選択し、”開く”ボタンを押下します。

ここまで指定内容を次回も入力するのは面倒なので、設定情報を保存しましょう。再度、カテゴリ−セッションタグを選択し「保存されたセッション」に適当な名前 を入力して、”保存”ボタンを押下します。次回は、保存した名前を選択し「読込」ボタンを押下することで、設定情報を呼び出せるようになります。 

4) 初めて(最初)のサーバと接続する場合、そのサーバとの接続を信用してよいのか? とダイアログがか)を聞いて来ますので、「はい(Y)」ボタンを押下すると、その接続先サーバのホストキーをローカルキャッシュに保存します。 

5) ターミナル画面が表示され、うまくサーバと接続できたら、ID/PASSWORD を聞いてきますので入力してください。ここでの PASSWORD は、サーバで設定されている ID に対しての PASSWORD ということを気を付けてください。

最後に : パスワード認証は、ID に対して PASSWORD が判ってしまうと簡単にサーバに接続できてしまうため、外部(外出先)から接続する方法としては、好ましくありません。もし外部から接続するのであれば、次項をお勧めします。

 

SSH2 による接続その(秘密鍵認証=yes, パスワード認証=no

上記でも説明した通り、パスワード認証は外部(外出先)から接続する方法としては、セキュリティ上問題が多いため秘密鍵認証を用いた方がより安全となります。秘密鍵認証は、キーペアとして作成された秘密鍵(private)と公開鍵(public)の2つを利用し、秘密鍵とそのパスフレーズによるパスワード管理となるため、2重3重のセキュリティが守られることとなります。

1) サーバ側の /usr/local/etc/sshd_config 内容を下記の様に設定します。

Protocol 2                  ← ssh2(Protocol 2)のみとします
PasswordAuthentication no   ← yes にすると、テキスト認証が可能です
RSAAuthentication yes       ← 秘密鍵認証を無効にします

2) 接続前の準備としてキーペアを作成しますが、ここでは既に接続するSSHサーバで作成したと仮定(Windowsでの作成方法)し話しを先に進めます。またこのとき1つ問題があり、SSHサーバで作成した秘密鍵(id_rsa)をそのまま PuTTY で使用し接続する事ができないので秘密鍵の再作成を行います。※ この作業は1回行えば良い。

3) ぶじ秘密鍵の再作成を終えたら、"puttyjp.exe"を実行します。接続パラメタは、「SSH2による接続その1」の 2)3) と同じなので説明を省き相違点だけを説明します。カテゴリ−セッションタグを選択し、「認証のためのプライベートキーファイル」に先程作成した PuTTY 用の秘密鍵を指定します。 

ここまで指定内容を次回も入力するのは面倒なので、設定情報を保存しましょう。再度、カテゴリ−セッションタグを選択し「保存されたセッション」に適当な名前 を入力して、”保存”ボタンを押下します。次回は、保存した名前を選択し「読込」ボタンを押下することで、設定情報を呼び出せるようになります。 

4) ターミナル画面が表示され、うまくサーバと接続できたら、ID を聞いてきますので入力してください。ID が正しい場合、パスフェーズを聞いてきます。パスフェーズはサーバの PASSWORD ではなく、公開鍵を作成したときのパスフェーズであることに気を付けてください。

SSH2 によるftp(秘密鍵認証=yes, パスワード認証=no

PuTTY サイトを見ると ftp ツールも充実しているのですが、いかんせんコマンドライン・・・辛っ。ってことでちょこっと探すとすぐにヒット(便利な世の中だ)ってな訳で、SSH1/SSH2 に対応したフリーの ftpソフト「WinSCP2」を使ってみることに。

※2003/11/06現在ですが、「WinSCP3」 Ver3.4.2になっており、マルチランゲージ対応となっているため、画面上の説明も日本語もしっかりなっておりokですよ。

というか以前から使用していたんですが、どーやら Ver2.0x版は SSH2 に完全に対応していないらしいので、最新版の Ver2.2を使ってみました。結果は、PuTTY で設定した情報も読み取れるし非常に便利でーっす♪(もしかして作者って一緒なの?)

 本家 : WinSCP

 参考 : WinSCP2 の使い方

1) まず WinSCP2 を実行しましょう。(英語だけどねぇぇぇぇ)

3) ”Tools”ボタンを押下すると、「Import / Clean up」の2つのメニューが表示されるので、”Import”ボタンを押下します。すると PuTTY で設定した情報が表示されるので、取り込みたい情報(Session)を指定し”OK”ボタンを押下します。

4) すると指定した情報(Session)が取り込まれます。

5) 初めて(最初)のサーバと接続する場合、そのサーバとの接続を信用してよいのか? とダイアログがか)を聞いて来ますので、「Yes」を押下すると、その接続先サーバのホストキーをローカルキャッシュに保存します。 

6) 秘密鍵のパスフレーズが設定されている場合には、下記のダイアログが表示されます。 

7) あとは、まったり・・・ 

Windows側でのキーペア作成方法

Windows側でもキーペアを作成することが可能ですよぉー。

1) "puttygen.exe"を実行し、「Type of key to generate:」の設定で”SSH2 RSA”を選択し、”Generate”ボタンを押下します。

2) すると以下の画面になりますので、青いバーを右端まで進めるためにマウスをジグザクに動かしましょう。マウスの動きで乱数を生成しているんですって♪

3) 正常に終わると下記の画面になります。「Key passphrase」に、キーペアに対するパスフレーズを入力しますが、ここで入力するパスフレーズは、Linux/Unix ユーザに対してのパスワードとは違うものです。ただこのパスフレーズ・・・。空白でも設定可能なのですが、そーするーと意味ないので、ちゃんと入力してくださいね。 

公開鍵=「Save public key」、秘密鍵=「Save private key」ボタンを押下することにより、それぞれのキーペアを保存します。公開鍵は、判りやすいように拡張子に pub(*.pub)を付けて保存します。ここでは、公開鍵( hoge_id_rsa.pub )、秘密鍵( hoge_id_rsa.PPK )としてます。

コメント=「Key comment」を判りやすい文字で書いておくと、後々管理が楽になります。  

4) 公開鍵をサーバに転送します。このとき、接続すべき(する?)ユーザのディレクトリ下に公開鍵を転送し以下のコマンドを実行します。 第3者がやるんでしょうなぁ。

[hoge ~]$ cd ~
[hoge ~]$ ls
hoge_id_dsa.pub
[hoge ~]$ ssh-keygen -i -f hoge_id_rsa.pub >> ~/.ssh/authorized_keys2

5) アクセスしてみましょ。

Windows側で作成したキーペアを、OpenSSH で使用する方法

Windows側で作成したキーペア(*.pub, *.PPK)は、OpenSSH でそのまま使用することができないため、若干の考慮が必要です。何故そのまま使用できないかというと、SSH2 キーペアの記述がRSA社の特許(現在は、特許主張をしてないらしい)と、OpenSSHの方針によって統一されておらず、現在バラバラの状態となっているかららしいです。

ちょっと書式を公開〜〜

PuTTY 公開鍵の書式
  ---- BEGIN SSH2 PUBLIC KEY ----
  Comment: "hoge5 "
  .........................
  ---- END SSH2 PUBLIC KEY ----


PuTTY 秘密鍵の書式
  PuTTY-User-Key-File-2: ssh-rsa
  Encryption: aes256-cbc
  Comment: hoge5
  Public-Lines: 4
  .........................
  Private-Lines: 8
  .........................
  Private-MAC: 


OpenSSH 公開鍵の書式
  ssh-rsa .........................

OpenSSH 秘密鍵の書式
  -----BEGIN RSA PRIVATE KEY-----
  Proc-Type: 4,ENCRYPTED
  DEK-Info: DES-EDE3-CBC,12927112C19357DD

  .........................
  -----END RSA PRIVATE KEY-----

PuTTY → OpenSSH 公開鍵の書式変換方法は、以下のとおりです。

ssh-keygen -i -f puttygenで作成した公開鍵 > OpenSSHでの公開鍵

★PuTTY → OpenSSH 秘密鍵の書式変換方法は、"puttygen.exe"を実行しキーペアを作成後、「Conversions」メニューの”Export OpenSSH”を選択すると OpenSSH形式での秘密鍵が作成できます。すでにキーペアを作成してしまった場合は、"puttygen.exe"で作成した秘密鍵(*.PPK)を読み込み同様の動作を行えば作成することができます。

1アカウント(ユーザ)で、複数のキーペアを管理する方法(SSH2 ですってば)

セキュリティ上あまり好ましい事ではありませんが、Linux/Unix で1アカウント(ユーザ)を複数人で共有して使用する場面があると思います。この場合の手順を以下に記述します。例として hoge アカウントを共有するとした。

1) ssh-keygen または "puttygen.exe"で作成した公開鍵(OpenSSH形式にしてね)を、共有対象となるアカウントの公開鍵管理ファイル( ~/.ssh/authorized_keys2 )に追加します。このとき vi等のエディタで追加しても問題ありませんが、できれば cat コマンドで追加したほうが間違いが少ないでしょう。

% cat 公開鍵 > ~/.ssh/authorized_keys2

2) これで共有 hoge アカウントに対し上記で追加した公開鍵と合致するキーペアの片割れ秘密鍵を明示的に指定して接続することができます。PuTTY の場合は、"puttygen.exe"で作成した秘密鍵を使用し、別サーバ(Linux/Unix)から ssh する場合は、ssh-keygen で作成した秘密鍵あるいは、"puttygen.exe"で作成した秘密鍵(OpenSSH形式に変換してね)から接続することができます。

※ 別サーバ(Linux/Unix)から ssh する場合は、秘密鍵を明示的に指定する。

% ssh -i 秘密鍵 hoge@localhost

PuTTY で作成したセッション情報

PuTTY 0.53b のバージョンでは、セッション情報を各マシンのレジストリに記録しています。これは、他のソフトとの連携でそのような仕様になっていると思いますが、マシンをお引越しする場合にはチョット面倒臭いです。

使用されているレジストリは、"HKEY_CURRENT_USER\Software\SimonTatham\" 以下にありますので、必要とあらばこのレジストリ以下を書き出し、新たなマシンにて読み込ませることによりお引越しができます。

パスフレーズの入力なしで認証できるようにする

"pageant.exe" や ssh-agent を用いて鍵ペアのパスフレーズを保存し秘密鍵の認証に対してパスフレーズを自動的に入力するプログラムがありますが、これは便利な反面、非常に危険な側面を持っており注意が必要です。、会社などで使用して他人がサーバに入って、情報を消したり漏洩したり・・・。ああ。こわい。ってな訳で、ここでは紹介しません♪ 

その他・・・・。もう書くの疲れた〜〜

この他に考慮する事は、以下を参照してください。

 ・SSH1 / SSH2 相互で運用する鍵一元管理を行う

  参考 : OpenSSH / SSH1 / SSH2 相互運用のための鍵管理

 ・ssh, scp, ... コマンドのマニュアルぅ

  参考 : ssh(1) - rlogin/rsh ライクの基本的なクライアントプログラム。

  参考 : ssh_config(5) - ssh クライアント設定ファイルの説明。

  参考 : sshd_config(5) - sshd デーモン設定ファイルの説明。

  参考 : ssh-agent(1) - 秘密鍵を保持するための認証エージェント。

  参考 : ssh-add(1) - 認証エージェントに鍵を登録するツール。

  参考 : scp(1) - rcp(1) に似たファイルコピープログラム。

  参考 : sftp(1) - SSH1 および SSH2 プロトコル上で動作する FTP ライクなプログラム。

  参考 : ssh-keygen(1) - 鍵生成ツール。

  参考 : sftp-server(8) - SFTP サーバサブシステム (sshd が自動的に起動する)。

  参考 : ssh-keyscan(1) - いくつかのホストからホスト公開鍵を収集するツール。

  参考 : ssh-keysign(8) - ホストベース認証を使うときの補助プログラム。

  参考 : ssh-rand-helper(8) - 乱数生成用の補助プログラム。