デベロッパー

デベロッパー

OpenSSH/Keychainに関する「究極の」ハウツー

Carla Schroder
2008年1月29日 / 10:00
 
 

OpenSSHのインストール

 OpenSSHは、どの種類のLinuxおよびUnixでも動作しますし、WindowsでさえもCygwinを通じて動作します。完全なCygwinをインストールしたくないユーザーはSSHWindowsを使用することができます。SSHWindowsはWindows用の簡素化されたSSHサーバーで、OpenSSHとCygwinをベースにしています。クライアントしか必要としないWindowsユーザーは、PuTTYがあれば十分でしょう。

 いつも利用しているパッケージリポジトリからOpenSSHを入手するか、OpenSSHのWebサイトからソースを取得してください。

SSHデーモンの開始と停止

 Red Hat系のシステムでは次のようにします。

# /etc/init.d/sshd start
# /etc/init.d/sshd stop

 Debian系のシステムでは次のようにします。

# /etc/init.d/ssh start
# /etc/init.d/ssh stop

 接続先のシステムでSSHデーモンが動作していて、ポート22が開かれていなければなりません。まず接続してリモートホストの「ホスト鍵」をダウンロードする必要があります。そうすれば、自分がパスワードを持っている任意のアカウントに接続できます。この例では、別のユーザーアカウントへのLAN接続を示しています。

carla@stinkpad:~$ ssh -l ftp_admin ftpserver
The authenticity of host 'ftpserver (192.168.1.15)' can't be 
established.
RSA key fingerprint is a7:c6:70:3e:00:77:73:ed:90:b1:9a:bc:e7:d5:ba:32.
Are you sure you want to continue connecting (yes/no)?

 ここでyesと入力すると、次のように表示されます。

Warning: Permanently added 'ftpserver 192.168.1.15' (RSA) to the 
list of known hosts.
ftp_admin@ftpserver's password:
Linux ftpserver 2.4.21 #1 Sun Dec 3 11:03:21 PDT 2004 i686 GNU/Linux
Libranet GNU/Linux
Last login: Sat Dec 2 10:17:45 from :0.0
ftp_admin@ftpserver:~$

 シェルプロンプトをよく見てください。この時点で、すでにリモートホストftpserverにログインしており、そのマシンを直接操作しているような感覚でコマンドを実行できる状態になっています。ftpserverの公開ホスト鍵のコピーは自分のローカルの~/.ssh/known_hostsに格納されます。

ホスト鍵の生成

 OpenSSHインストールでは、RSAホスト鍵とDSAホスト鍵のセットが生成されているはずです(両方とも暗号的に強いので、どちらを使用してもかまいません)。これらは/etc/ssh/に格納されています。もしないか、それらを変更したければ、次のようにしてください。

# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

 ssh-keygenによって秘密鍵と公開鍵の両方が生成され、.pub拡張子が付けられます。強力なパスフレーズを工夫することが大切です。このパスフレーズは頻繁に使うものなので、入力しやすいものでなければなりません。無理に記憶しようとせずに、紙に書き留めて安全な場所に保管してください。筆者の場合は、いつも持ち歩いている手帳に書き留めてあり、その写しを鍵のかかるファイルキャビネットに保管しています。パスフレーズでは、辞書に載っているような語を避けるのが賢明です。英字を数字に置き換えて、たとえば「h3ll0, th1s is mai l33t p4ssphr4se」などとするのがよいでしょう。

 上の例ではデフォルトの鍵名を使用しています。鍵には好きな名前を付けることができるので、「ftp_server_key」のようにすれば、サーバーの管理用のアカウントを作成するときに便利です。別の名前を使用する場合は、次のように、/etc/ssh/sshd_configに記載することを忘れないでください。

# HostKeys for protocol version 2
HostKey /etc/ssh/ftp_server_key

 ホスト鍵を無闇に変更してはいけません。接続しようとする設定済みのすべてのクライアントが、次のような恐ろしい警告を受け取ることになるからです。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle 
attack)!

 クライアントは新しい鍵をダウンロードできます。とはいえ、ホスト鍵を変更するときは、必ずユーザーたちに知らせておくべきです。

 「man-in-the-middle attack(中間者攻撃)」とは、誰かが鍵交換を途中で横取りして、自分の鍵を挿入することです。リスクは小さいものの、用心深い人たちは他の方法で――スニーカーネット(つまり手渡し)や確立されたSSHセッションを通じて――鍵を転送します。ホスト鍵は平文なので、手作業でコピーすることができます。しかし、わずかに修正しなければなりません。仮に/etc/ssh/ftp_server_key.pubが次のようになっているとします。

ssh-rsa
AAAAB3NzaC1yc2EAAAABIwAAAIEAwo+75MsrsXNANKy6U7J2FM0T
MaQypEVlkNCVVXbX1nc3U3YnQLxmpwqYdVggGqrqS5IMhGJV5HaUt8PQnZ03K
KOU65d3Y/MuX5mrhcI+YtQZN0QudOXOx7RQMAHLluspO6BWARZdHO4FXcn7P3
T6IvURZ3fF5fgymVDwosCr0Pc= root@ftpserver

 ~/.ssh/known_hostsでは、次のように修正する必要があります。

ftpserver.domain.net, 192.168.1.15 ssh-rsa
AAAAB3NzaC1yc2EAAAABIwAAAIEAwo+75MsrsXNANKy6U7J2FM
0TMaQypEVlkNCVVXbX1nc3U3YnQLxmpwqYdVggGqrqS5IMhGJV5HaUt8PQnZ03
KKOU65d3Y/MuX5mrhcI+YtQZN0QudOXOx7RQMAHLluspO6BWARZdHO4FXcn
7P3T6IvURZ3fF5fgymVDwosCr0Pc=

 これらはAAAABで始まる分割されていない単一の行でなければなりません。

 これで、ftpserverにアカウントを持つユーザーが安全なリモートログインを行うことができます。

公開鍵認証

 いろいろなサーバーの管理を担当する場合は、追跡すべきログインがいくつもできてしまいます。そういう場合は、公開鍵認証を使って、さまざまなホストに対して1つのログインを使用するようにしてください。これには自分のシステムログインを保護するという利点もあります。まず新しい公開鍵/秘密鍵ペアを生成して、ホームディレクトリに格納します。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/carla/.ssh/id_rsa):
....

 次に新しい公開鍵(id_rsa.pub)を、ログインするすべてのリモートユーザーアカウントの~/.ssh/authorized_keysファイルにコピーします。ログインするときには、アカウントログインの代わりにSSHパスフレーズを入力するよう求められます。

carla@stinkpad:~$ ssh -l ftp_admin ftpserver.domain.net
Enter passphrase for key '/home/carla/.ssh/id_rsa':
...

 多くのサーバーに対して1つの鍵を使用するか、多くの鍵を使用するか、都合のよいやり方を使用してください。

keychainによる自動ログイン

 keychainは小さいながら優れたユーティリティです。起動時にSSHパスフレーズを入力すると、keychainが次の再起動までSSHセッションをすべて自動的に認証します(当然ですが、ワークステーションの物理的なセキュリティに注意を払う必要があります)。keychainでは、cronからSSH転送をスケジュールすることもできます。空のパスフレーズを使用してはなりません。さもないと、秘密鍵が盗まれれば簡単に「なりすまし」を許すことになってしまいます。

 まずssh-agentをインストールします。次にkeychainをインストールし、ローカルの~/.bash_profileを編集して、秘密鍵に名前を付けます。

keychain id_dsa
    . ~/.keychain/$HOSTNAME-sh

 秘密鍵が2つ以上ある場合は、次のように秘密鍵どうしをスペースで区切ります。

keychain id_dsa fun_key mon_key

 2行目の先頭には必ずドットを付けてください。これにより、Bashが指定のファイルを参照するようになります。

 こうして基本的なSSH操作を行います。SSHではもっと有用なタスクをいろいろと行えます。たとえば、ほとんどすべてのプロトコル(X11、POP、FTP)の安全なトンネリング、安全なファイルコピー、ポートフォワーディングなどがあります。詳細については、以下の参考資料を参照してください。

参考資料

著者紹介

Carla Schroder(Carla Schroder)
【関連記事】
Linux のログインを制限する
Linux のログイン制限
Asterisk サーバーのセキュリティを確保する ―パート2
Asterisk サーバーのセキュリティ確保 ―パート2――1
Linux ラップトップとデスクトップの同期――3

New Topics

Special Ad

ウマいもの情報てんこ盛り「えん食べ」
ウマいもの情報てんこ盛り「えん食べ」 「えん食べ」は、エンジョイして食べる、エンターテイメントとして食べものを楽しむための、ニュース、コラム、レシピ、動画などを提供します。 てんこ盛りをエンジョイするのは こちらから

Hot Topics

IT Job

Interviews / Specials

Popular

Access Ranking

Partner Sites