タイトル大津真=XはUNIXでサーバで》SSHの使い方(2)カテゴリー暗合化, ネットワーク管理, 大津真=XはUNIXでサーバで
作成日2001/10/25 16:59:11作成者新居雅行
――――公開鍵暗号方式で認証する
さて、このように単にsloginコマンドを使ってリモートログインするだけでも通信は暗号化されるのでセキュリティは高まります。ただし、パスワードを使ってのログインでは、そのパスワードが漏れてしまえばだれでもログインできてしまいます。UNIX系OSのパスワードファイル(/etc/passwd)の脆弱性は前々から指摘されています。最近ではシャドウ化されているとはいえ、多くのシステムでは最大文字数が8文字と短く、またインターネット上で出回っているクラッキングツールを使えば簡単に解析できてしまうと言われています。そのためSSHを使用する場合には、ユーザ認証により安全な公開鍵暗号を使うのがふつうです。
公開鍵暗号方式では「公開鍵」と「秘密鍵」という2つの鍵と、これまでのパスワードに代わる「パスフレーズ」を使用します。ここでパスフレーズとは従来のパスワードと同じようなものですが、より複雑にするため、通常は英単語を組み合わせた句や文のような長いものを指定します。もちろんパスフレーズは自分の頭の中だけににいれておきます。よく紙に書いてディスプレイに貼り付けている人がいますがとても危険ですね。もちろん忘れてしまっては意味がありませんが…。
そのパスフレーズをもとに後述するssh-keygenコマンドで公開鍵と秘密鍵という鍵のペアがテキストファイルとして自動生成されます。ここで「公開鍵」は接続先のホストに登録するもので、他人に見られてもかまいませんが、「秘密鍵」は文字通り秘密の鍵で管理を厳重にする必要があります。

〈鍵の作成〉
SSHプロトコルには大きく分けてバージョン1とバージョン2があります。これらの大きな相違は認証アルゴリズムです。バージョン1では公開鍵の交換方式としてRSA方式を使用し、バージョン2ではDSA方式を使用します。今後次第にバージョン2に置き換わっていくと思われますが、バージョン1のみしか対応していないサーバもまだまだ多くあります。なお、OS Xに付属のOpen SSHは両方のバージョンに対応しています。
ここでは両方のバージョンの鍵のペアを作成しましょう。コマンドにはssh-keygenを使用します。

まずは、バージョン1用の鍵です。ssh-keygenコマンドをオプションなしで実行します。

% ssh-keygen 〈return〉
Generating public/private rsa1 key pair.
Enter file in which to save the key (/Users/o2/.ssh/identity): 〈return〉
Enter passphrase (empty for no passphrase): ←パスフレーズを入力
Enter same passphrase again: ←もう一度パスフレーズを入力
Your identification has been saved in /Users/o2/.ssh/identity.
Your public key has been saved in /Users/o2/.ssh/identity.pub.
The key fingerprint is:
53:41:11:b3:81:45:40:78:db:88:1c:e3:4a:28:87:8a o2@g3mac

これで~/.sshディレクトリにバージョン1用鍵ペアのファイルが生成されます。

identity.pub:公開鍵
identity:秘密鍵

次に、バージョン2用の鍵です。今度は「-d」オプションをつけてssh-keygenコマンドを実行します。

% ssh-keygen -d 〈return〉
Generating public/private dsa key pair.
Enter file in which to save the key (/Users/o2/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/o2/.ssh/id_dsa.
Your public key has been saved in /Users/o2/.ssh/id_dsa.pub.
The key fingerprint is:
04:f6:f3:54:78:bb:6d:bb:a0:7d:50:f7:14:b9:58:c8 o2@g3mac

バージョン2用の鍵ペアは次の通りです。
id_dsa.pub:公開鍵
id_dsa:秘密鍵

〈鍵の登録〉
作成した鍵の中で「公開鍵」の方をログインしたいサーバの管理者にメールなどで転送して登録してもらいます。自分で登録する場合、鍵を追加するファイルがSSHプロトコルのバージョンによって異なるので注意してください。バージョン1の場合には、「~/.ssh/authorized_keys」、バージョン2では、「~/.ssh/authorized_keys2」になります。
これらは単なるテキストファイルなのでcatコマンドなどを使用して追加すればいいでしょう。

% cat identity.pub >> ~/.ssh/authorized_keys 〈return〉
% cat id_dsa.pub >> ~/.ssh/authorized_keys2 〈return〉

〈公開鍵によるログイン〉
サーバに公開鍵を登録したら、再びログインしてみましょう。2つのバージョンの公開鍵を登録してある場合、sloginコマンドを使用するとバージョン2でのログインになります。

% ssh ibook 〈return〉
Enter passphrase for key ’/Users/o2/.ssh/id_dsa’: ←パスフレーズを入力
Welcome to Darwin!
[ibook:~] o2% ←ログイン完了

今度は、「Enter passphrase 〜」というようにパスフレーズを聞いてきます。「 password:」と表示されるようなら登録がうまくいっていません。
なお、明示的にプロトコルを指定するには「-1」もしくは「-2」オプションを指定します。

% ssh -1 ibook〈return〉 ←バージョン1プロトコルでログイン
Enter passphrase for RSA key ’o2@g3mac’: ←パスフレーズを入力
Welcome to Darwin!
[ibook:~] o2% ←ログイン完了

〈パスワード認証をできないようにする〉
より安全性を高めるにはサーバ側でパスワードによる認証をできないように設定した方がいいでしょう。それには、サーバ側の/etc/sshd_configを編集し、PasswordAuthenticationを「no」に設定します。

PasswordAuthentication no

次に、sshdを再起動します。OS Xの場合には[システム環境設定]の[共有]を開き、[アプリケーション]パネルで[リモートログインを許可する]にチェックを外して、再びチェックすれば再起動できます。Terminalで行うにはpsコマンドでプロセス番号を調べてkillコマンドでHUPシグナルを送ります。

% ps ax | grep sshd 〈return〉
428 ?? Ss 0:00.90 /usr/sbin/sshd ←428がsshdのプロセス番号
1016 std R+ 0:00.00 grep sshd
% sudo kill -HUP 428〈return〉

以上で、公開鍵方式以外の認証はできなくなります。

〈SSHのその他のコマンド〉
SSHは単にリモートログインだけのツールではありません。リモートのプログラムを実行させたり、あるいはFTPの代わりに使用することも可能です。最後にSSHに容易されているその他の機能をまとめておきましょう。詳しくはオンラインマニュアルを参照してください。

sftp:ファイル転送コマンド。ftpコマンドと同じように使用できる
scp:リモートファイルのコピーコマンド
ssh-agent:認証エージェント。セッション内でパスフレーズを記憶しておくことができる。
ssh-add:認証エージェントに鍵を記憶させるコマンド

(続く)
[大津真]
関連リンクhttp://www.o2-m.com/