2.1. SSHのクライアント、サーバソフトの確認、プロトコルの確認3.鍵のペア(公開鍵/秘密鍵)の生成
2.2. 鍵のペア(公開鍵/秘密鍵)の生成
2.3. 秘密鍵の登録
2.4. 公開鍵をサーバに送る
2.5. 公開鍵の登録
2.6. 公開鍵認証の動作確認
3.1.プロトコル Ver.1.5用の鍵のペアの生成4.鍵のペアの登録
3.2.OpenSSH用(プロトコル Ver.2.0)の鍵のペアの生成
3.3.製品版SSH Ver.3(プロトコル Ver.2.0)の鍵のペアの生成
4.1.プロトコル Ver.1.5用の公開鍵の登録5.公開鍵認証の動作確認
4.2. OpenSSH(プロトコル Ver.2.0)の公開鍵の登録
4.3.製品版SSH Ver.3(プロトコル Ver.2.0)の公開鍵の登録
5.1.製品版SSH Ver.1(プロトコル Ver.1.5)A.SSHの種類の調べ方
5.2.製品版SSH Ver.3(プロトコル Ver.2.0)
5.3.Open SSH(プロトコル Ver.1.5)
5.4.Open SSH(プロトコル Ver.2.0)
A.1.サーバのSSHソフトウエアの種類および対応プロトコルの調べ方:B.Open SSHとSun SSHの非互換性部分について
A.2.クライアントのSSHソフトウエアの種類の調べ方:
A.3.SSHの鍵のペアの作成ツールのバージョンの調べ方
B.1.Sun SSH(プロトコル Ver.2.0)の公開鍵を、製品版SSH Ver.3の公開鍵に変換C. sshのファイルの一覧
B.2. 製品版SSH Ver.3の公開鍵の公開鍵をSun SSH(プロトコル Ver.2.0)の公開鍵に変換
ほとんどのsshユーザがパスワード認証を使っているかと思います。パスワー ド認証はサーバに登録したパスワードを元に認証を行います。ですが、パスワー ド認証は辞書攻撃等でクラッカーに陥落される恐れがあります。近年sshのク ラッキングのツールが流通しているようで学内のsshサーバにも頻繁にクラッ キングのログが残っています。このように脆弱なパスワード認証に代わるもの として公開鍵認証があります。
公開鍵認証は、公開鍵と秘密鍵とよばれる二つの鍵を使います。この鍵はユー ザが指定するものではなく、計算機が生成します。公開鍵と秘密鍵は常に ペアであつかいます。ペアになる公開鍵と秘密鍵には、数学的な共通の性質を 持ちます。しかし、容易には公開鍵からペアになる秘密鍵を生成できないとい う性質があります。またその逆もです。
sshの公開鍵認証では、秘密鍵をクライアント側に登録し、公開鍵をサーバ側 に登録します。クライアントからサーバにlogin認証を求められた場合、サー バは数学的な共通な性質を基に、クライアントに数学の質問をします。そして 質問に正しく答えた場合のみ、loginの許可をします。正しく答えられないク ライアントはloginできません。つまり正しい秘密鍵を持たないクライアント はloginできません。
ですがこの秘密鍵をクラッカーに盗まれると、サーバにloginできてしまいま す。loginが容易にできないよう、秘密鍵を暗号化しています。この暗号化の パスワードを「パスフレーズ(passphrase)」と呼んでいます。
以上のように、公開鍵認証はパスワード認証に比べ、パスフレーズと公開鍵/ 秘密鍵を使うためセキュリティが強固ですが、鍵の登録方法が繁雑です。また sshのソフトウエアによって異なり登録ミスを起こしやすいです。ソフトウエ ア毎に登録方法をまとめてみました。
SSHのソフトウエアは多数ありますが、出回ってるのはだいたい以下のような ものでしょう。
機能 | No.1 | No.2 | No.3 | No.4 | No.5 | No.6 | No.7 | No.8 |
---|---|---|---|---|---|---|---|---|
クライアント | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
サーバ | ○ | ○ | ○ | ○ | ○ | × | × | × |
プロトコル | No.1 | No.2 | No.3 | No.4 | No.5 | No.6 | No.7 | No.8 |
---|---|---|---|---|---|---|---|---|
Ver.1.5 | ○ | × | × | ○ | ○ | × | ○ | ○ |
Ver.2.0 | × | ○ | ○ | ○ | ○ | ○ | × | ○ |
puttyとTeraTermの設定については、次のWebが参考になります。
確認事項は、下記の4点です。
プロトコルについては、クライアントとサーバで共通に使えるプロトコルを選 ぶ必要があります。Ver.1.5と2.0の両方が利用可能な場合はVer.2.0を選んで ください。
公開鍵認証の鍵には4種類あります。
公開鍵のファイル : ~/.ssh/identity.pub
秘密鍵のファイル : ~/.ssh/identity
公開鍵のファイル : ~/.ssh/id_dsa.pub
秘密鍵のファイル : ~/.ssh/id_dsa
公開鍵のファイル : ~/.ssh2/id_dsa_2048_a.pub (条件により多少ファイル名が異なる)
秘密鍵のファイル : ~/.ssh2/id_dsa_2048_a (同上)
鍵のペアの生成方法は、ソフトウエアにより方法が異なります。適切なソフト ウエアを下記から選択してください。
秘密鍵が複数ありid_dsa_2048_a, id_dsa_2048_b, id_dsa_2048_cだった場合、 次のファイルに
秘密鍵の登録ファイル : ~/.ssh2/identification (クライアント側のファイル)次のようなフォーマットで記載する。
IDkey 秘密鍵のファイル名
IDkey id_dsa_2048_a
IDkey id_dsa_2048_b
IDkey id_dsa_2048_c
ftpやtelnet、パスワード認証のsshが使える場合は送る事が可能であるが、サー バに公開鍵認証のssh以外の手段でremote loginできない場合は、サーバに直 接loginしFDやUSBメモリで運ぶか、サーバの管理者に公開鍵を登録してもらう などの対処が必要になる。
いろいろ諸意見があると思うが、公開鍵は極秘扱いするようなファイルではな いと思う。メール等でサーバ管理者に送っても良いのではないだろうか?
oginには「ssh」コマンドを使って行う。各クライアントのバージョン毎に違 いをまとめた。
% ssh サーバのホスト名
説明文中「とりあえずyesを選ぶ」と書いてある部分があるが、これはsshがセ キュリティ上の問題について指摘しているのだが、ほとんどのユーザには調べ る手段を持たないので、良くはない事だが、とりあえずyesにして欲しい。あ と、この質問は初めてloginする時にのみ行われ、2回目以降は行われない。逆 に2回目以降に質問してきた場合は、なんらかのセキュリティ問題が起きてい る。
次に、条件によってはパスフレーズ(passphrase)の入力は求められず、サーバ に登録したパスワード(password)の入力が求められる場合がある。これは公開 鍵認証の設定が失敗して、パスワード認証になっている。設定を再確認して欲 しい。
次に、サーバによっては、いきなりエラーで終了する場合がある。これは公開 鍵認証の設定が失敗して、かつサーバがパスワード認証を許可していない場合 である。設定を再確認して欲しい。matumoto@server.example.com's password: (製品版SSH Ver.1の出力例)
Permission denied. (製品版SSH Ver.1の出力例)
次に、クライアント側とサーバ側でユーザ名が異なる場合は、「-l」オプショ ンでユーザ名を指定する必要がある。
% ssh サーバのホスト名 -l サーバのユーザ名
下記から適切なクライアントのバージョンを選択する。
公開鍵のファイル : ~/.ssh/identity.pub鍵の生成方法は次の通りである。
秘密鍵のファイル : ~/.ssh/identity
% ssh-keygen -t rsa1 Generating public/private rsa1 key pair. Enter file in which to save the key (/user/matumoto/.ssh/identity): ← このままでOK Enter passphrase (empty for no passphrase): ←パスフレーズ入力 Enter same passphrase again: ←パスフレーズ再入力 Your identification has been saved in /user/matumoto/.ssh/identity. Your public key has been saved in /user/matumoto/.ssh/identity.pub. The key fingerprint is: 11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff matumoto@hoge.example.com
% ssh-keygen Enter file in which to save the key (/user/matumoto/.ssh/identity): ← このままでOK Enter passphrase: ←パスフレーズ入力 Enter the same passphrase again: ←パスフレーズ再 1024 33 123445(省略)32324242 matumoto@hoge.example.com Your public key has been saved in /user/matumoto/.ssh/identity.pub
公開鍵のファイル : ~/.ssh/id_dsa.pub鍵の生成方法は次の通りである。プロトコルVer.2.0の鍵の生成には「-t dsa」を指定する。
秘密鍵のファイル : ~/.ssh/id_dsa
次に、クライアントのソフトウエアがOpenSSHであるが、サーバのソフトウエ アが製品版SSH Ver.3の場合は、鍵のフォーマットを変換する必要がある。鍵 のフォーマット変換機能はOpenSSHにしか無いため、クライアント側で変換を 行う必要がある。% ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/user/matumoto/.ssh/id_dsa): ← このままでOK Enter passphrase (empty for no passphrase): ←パスフレーズ入力 Enter same passphrase again: ←パスフレーズ再 Your identification has been saved in /user/matumoto/.ssh/id_dsa. Your public key has been saved in /user/matumoto/.ssh/id_dsa.pub. The key fingerprint is: 11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff matumoto@hoge.example.com
次の手順でOpenSSH の公開鍵を製品版SSH Ver.3の公開鍵に変換できる。(注: Sun SSHの場合は こちらを参照ください。)
例:% ssh-keygen -e -t dsa -f OpenSSHの公開鍵 > 適当な出力ファイル名.pub
% ssh-keygen -e -t dsa -f ~/.ssh/id_dsa.pub > ~/SSHVer3-public-key.pub
公開鍵のファイル : ~/.ssh2/id_dsa_2048_a.pub条件により多少ファイル名が異なる。数字の2048の部分は鍵のbit数。製品版 SSHは公開鍵を複数生成も可能である。複数生成した場合はファイル名の後ろ が_a,_b,_cとアルファベットが増えてくる。
秘密鍵のファイル : ~/.ssh2/id_dsa_2048_a
鍵の生成方法は次の通りである。オプションは必要無し。
% ssh-keygen Generating 2048-bit dsa key pair 5 oOo.ooOo.oOo Key generated. 2048-bit dsa, matumoto@hoge.example.com, Thu Dec 01 2005 15:06:26 +0900 Passphrase : ←パスフレーズ入力 Again : ←パスフレーズ再 Private key saved to /user/matumoto/.ssh2/id_dsa_2048_a Public key saved to /user/matumoto/.ssh2/id_dsa_2048_a.pub
公開鍵の登録ファイル : ~/.ssh/authorized_keys (サーバ側のファイル)公開鍵は1行の文字列である。複数登録する事も可能。複数登録する場合は、2 行目以降に登録する。またOpenSSHの場合はVer.1.5とVer.2.0の混在も可能。
例:% ssh-keygen -i -t dsa -f 製品版SSH Ver.3の公開鍵 > 適当な出力ファイル名.pub
以上で変換は終了である。% ssh-keygen -e -t dsa -f ~/id_dsa_2048_a.pub > ~/OpenSSH-Public-key.pub
次に、OpenSSH(プロトコル Ver.2.0)の公開鍵を次のファイルに登録する。OpenSSHの 公開鍵は一行の文字列である。
公開鍵の登録ファイル : ~/.ssh/authorized_keys (サーバ側のファイル)公開鍵を複数登録する事も可能。複数登録する場合は、2行目以降に登録する。 またVer.1.5とVer.2.0の混在も可能。
公開鍵のファイル : ~/.ssh2/client.pub (サーバ側のファイル)次のファイルに上記公開鍵を保存したファイル名を登録する。
公開鍵の登録ファイル : ~/.ssh2/authorization (サーバ側のファイル)次のようなフォーマットで記載する。複数登録可能である。
Key 公開鍵のファイル名
Key client.pub
Key client2.pub
パスフレーズ入力の部分がpasswordと表示された場合は、公開鍵の設定が失敗 している。% ssh サーバのホスト名 (始めてloginする場合はここでyes/noの質問をしてくるが、とりあえずyesを選ぶ) Enter passphrase for RSA key 'matumoto@client.example.com': ← パスフレーズ入力。 (login成功すると、サーバのプロンプトが出る。)
次のエラーが出た場合は、公開鍵の設定が失敗し、かつパスワード認証が許可されていない。matumoto@server.example.com's password: ← パスワード入力
Permission denied.
パスフレーズ入力の部分がpasswordと表示された場合は、公開鍵の設定が失敗 している。% ssh サーバのホスト名 (始めてloginする場合はここでyes/noの質問をしてくるが、とりあえずyesを選ぶ) Passphrase for key "/user/matumoto/.ssh2/id_dsa_2048_a" with comment "2048-bit dsa, (長いので折曲げ) matumoto@client.example.com, Thu Oct 09 2003 10:53:13 +0900": ← パスフレーズ入力。 (login成功すると、サーバのプロンプトが出る。)
次のエラーが出た場合は、公開鍵の設定が失敗し、かつパスワード認証が許可されていない。matumoto's password:
warning: Authentication failed. Disconnected; no more authentication methods available (No further authentication methods available.).
パスフレーズ入力の部分がpasswordと表示された場合は、公開鍵の設定が失敗 している。% ssh サーバのホスト名 (始めてloginする場合はここでyes/noの質問をしてくるが、とりあえずyesを選ぶ) Enter passphrase for RSA key '/user/matumoto/.ssh/identity': ← パスフレーズ入力。 (login成功すると、サーバのプロンプトが出る。)
次のエラーが出た場合は、公開鍵の設定が失敗し、かつパスワード認証が許可されていない。matumoto@server.example.com's password: ← パスワード入力
Permission denied.
パスフレーズ入力の部分がpasswordと表示された場合は、公開鍵の設定が失敗 している。% ssh サーバのホスト名 (始めてloginする場合はここでyes/noの質問をしてくるが、とりあえずyesを選ぶ) Enter passphrase for key '/user/matumoto/.ssh/id_dsa': ← パスフレーズ入力。 (login成功すると、サーバのプロンプトが出る。)
次のエラーが出た場合は、公開鍵の設定が失敗し、かつパスワード認証が許可されていない。matumoto@server.example.com's password: ← パスワード入力
Permission denied (publickey).
接続すると「SSH-XXXX」うんたらと表示されると思います。そこの文字列で判断できます。 確認したら「quit」で抜けてください。
表示される文字列で次のようになっている。% telnet サーバのホスト名 22 Trying hoge.example.com Connected to hoge.example.com Escape character is '^]'. SSH-1.5-1.2.33 ← ここ quit ← quitで抜け出す Protocol mismatch. Connection closed by foreign host.
プロトコルについて:
文字列 | プロトコル | ソフトウエア等 |
---|---|---|
SSH-1.5-1.2.33 | Ver.1.5 | 製品版SSH Ver.1 (ssh-1.2.33) |
SSH-1.99-OpenSSH_3.7.1p2 | 両対応 | OpenSSH-3.7.1p2 |
SSH-2.0-OpenSSH_4.2 | Ver.2.0 | OpenSSH-4.2 |
SSH-1.99-3.2.9.1 SSH Secure Shell (non-commercial) | 両対応 | 製品版SSH Ver.3(ssh-3.2.9.1) |
SSH-1.5-OpenSSH_4.2p1 FreeBSD-20050903 | Ver.1.5 | OpenSSH-4.2p1 |
SSH-1.99-OpenSSH_4.2p1 FreeBSD-20050903 | 両対応 | OpenSSH-4.2p1 |
SSH-2.0-OpenSSH_4.2p1 FreeBSD-20050903 | Ver.2.0 | OpenSSH-4.2p1 |
SSH-1.99-Sun_SSH_1.0.1 | 両対応 | Sun SSH 1.0.1 |
% ssh -V OpenSSH_3.7.1p2, SSH protocols 1.5/2.0, OpenSSL 0.9.6m [engine] 17 Mar 2004
% ssh -V (FreeBSD-6.0R付属のssh) OpenSSH_4.2p1 FreeBSD-20050903, OpenSSL 0.9.7e-p1 25 Oct 2004 % ssh -V (FedoraCore4付属のssh) OpenSSH_4.2p1, OpenSSL 0.9.7f 22 Mar 2005
% ssh -V SSH Version 1.2.33 [sparc-sun-solaris2.8], protocol version 1.5. Standard version. Does not use RSAREF.
% ssh -V ssh2: SSH Secure Shell 3.2.9.1 (non-commercial version) on sparc-sun-solaris2.8
% ssh -V SSH Version Sun_SSH_1.0.1, protocol versions 1.5/2.0.
複数導入されていた場合の確認方法であるが、ssh-keygenには「-V」のような 便利なオプションが無いようである。だが「-V」がエラーになった時の出力で 大体区別可能のようである。「ssh-keygen -V」の出力例を挙げておくので参考に して欲しい。
% ssh-keygen -V ssh-keygen: illegal option -- V Usage: ssh-keygen [options] Options: -b bits Number of bits in the key to create. -c Change comment in private and public key files. -e Convert OpenSSH to IETF SECSH key file. -f filename Filename of the key file. -g Use generic DNS resource record format. -i Convert IETF SECSH to OpenSSH key file. -l Show fingerprint of key file. -p Change passphrase of private key file. -q Quiet. -y Read private key file and print public key. -t type Specify type of key to create. -B Show bubblebabble digest of key file. -C comment Provide new comment. -N phrase Provide new passphrase. -P phrase Provide old passphrase. -G file Generate candidates for DH-GEX moduli -T file Screen candidates for DH-GEX moduli
% ssh-keygen -V ssh-keygen: illegal option -- V Usage: ssh-keygen [options] Options: -a trials Number of trials for screening DH-GEX moduli. -B Show bubblebabble digest of key file. -b bits Number of bits in the key to create. -C comment Provide new comment. -c Change comment in private and public key files. -e Convert OpenSSH to IETF SECSH key file. -F hostname Find hostname in known hosts file. -f filename Filename of the key file. -G file Generate candidates for DH-GEX moduli. -g Use generic DNS resource record format. -H Hash names in known_hosts file. -i Convert IETF SECSH to OpenSSH key file. -l Show fingerprint of key file. -M memory Amount of memory (MB) to use for generating DH-GEX moduli. -N phrase Provide new passphrase. -P phrase Provide old passphrase. -p Change passphrase of private key file. -q Quiet. -R hostname Remove host from known_hosts file. -r hostname Print DNS resource record. -S start Start point (hex) for generating DH-GEX moduli. -T file Screen candidates for DH-GEX moduli. -t type Specify type of key to create. -v Verbose. -W gen Generator to use for generating DH-GEX moduli. -y Read private key file and print public key.
% ssh-keygen -V ssh-keygen: illegal option -- V ssh-keygen version 1.2.33 Usage: ssh-keygen [-b bits] [-p] [-c] [-u] [-f file] [-P pass] [-N new-pass] [-C comment]
% ssh-keygen -V ssh-keygen version 3.2.9.1, compiled Oct 17 2004.
% ssh-keygen -V ssh-keygen: illegal option -- V Usage: ssh-keygen [-lpqxXyc] [-t type] [-b bits] [-f file] [-C comment] [-N new-pass] [-P pass]
例:% ssh-keygen -x -t dsa -f SunSSHの秘密鍵 > 適当な出力ファイル名.pub
この出力された鍵を、ファイルに保存すれば良い。保存例。% ssh-keygen -x -t dsa -f ~/.ssh/id_dsa > ~/SSHVer3-public-key.pub Enter passphrase: ---- BEGIN SSH2 PUBLIC KEY ---- Comment: "2048-bit DSA, converted from OpenSSH by matumoto@hoge.example.com" AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB CCCCCCCCCCCCCCCCCC== ---- END SSH2 PUBLIC KEY ----
例:% ssh-keygen -X -t dsa -f 製品版SSH Ver.3の公開鍵 > 適当な出力ファイル名.pub
以上で変換は終了である。% ssh-keygen -e -t dsa -f ~/id_dsa_2048_a.pub > ~/SunSSH-Public-key.pub ignore: ---- BEGIN SSH2 PUBLIC KEY ---- ignore: Subject: matumoto ignore: Comment: "2048-bit dsa, matumoto@client.example.com, Wed Apr 11 2001 13:11:39" ignore: ---- END SSH2 PUBLIC KEY ----