ファイアウォールの外のマシン(fuji, suzuka, aida)に SSH をインストールしました。 これらのマシンに telnet や rlogin される方、 とくに root になる可能性のある方は、 できるかぎり SSH を利用するようにして下さい。
SSH (Secure Shell) は rsh, rlogin などの rコマンド(リモートコマンド) を、セッションを暗号化する sコマンドに置き換えるものです。 SSH は公開鍵暗号を利用してセッションを暗号化するため、 鍵情報の取扱が簡単です (厳密には公開鍵暗号はセッション鍵の交換に用い、 実際のセッションの暗号化は共通鍵暗号でしていると思います)。
クライアント側のプログラムとしては rsh, rlogin, rcp にそれぞれ ssh, slogin, scp が対応します。 ssh は xrsh と同等の機能も持ちます。
サーバ側は sshd というデーモンがクライアントの sコマンドからの要求を処理します。
鍵の生成や登録は次節で説明します。 研コンをクライアントにする場合の説明ですが、 サーバとクライアントを逆に考えればよいだけです。
ssh のクライアントプログラムは UNIX用なら簡単に入手・インストールできます。 Windows や Mac にも GNUや shareware の実装があるようです。 詳しくは JAISTの方のページ などを参考にしてみてください。 (自分でやってみて、うまくいったら報告します)
必要なクライアントプログラムはすでにインストールされているので、 ユーザとしては鍵の生成などの作業をします。
まず
% ssh-keygenとすると鍵の生成が始まります (%はコマンドラインプロンプトだと思って下さい)。
しばらくすると鍵の生成が終わり、 保存場所を聞いてきます。普通はただリターンを押せば OKです。 すると、次にパスフレーズを尋ねてきます。Initializing random number generator... Generating p: .....++ (distance 50) Generating q: ................................++ (distance 438) Computing the keys... Testing the keys... Key generation complete. Enter file in which to save the key (/home/morikawa/.ssh/identity):
Enter passphrase:
パスフレーズはパスワードの一種ですが、sshの暗号鍵に使われるのではなく、 鍵をローカルのディスクに保存しておくためのパスワードになります。 文字数の制限や空白の有無は気にしなくてもよいので、 自由な文字列(文章)を入力することができます。 ただし簡単に類推されないようにあまりにもわかりやすい文章は避け、 できれば大文字小文字や空白を不自然に使ったり、 わざと間違った文字を入れたりします。 たとえば
anzen2 tSuShin4 taikara $$Hのような感じです(間違ってもこの例をそのまま使ったりしないように!)。 入力したパスフレーズは表示されないので、忘れずに覚えておきます。 確認のためもう一度入力すると、生成は終了です。
(「安全に通信したいからSSH」)
生成された秘密鍵は ‾/.ssh/identity に保存され、対応する公開鍵は ‾/.ssh/identity.pub に保存されます (上で特に指定した場合はその名前になります)。
秘密鍵 identity は(パスフレーズで守られているとはいえ) 絶対に秘密に保つようにします。 パーミッションにより他人には見られないようにしておいてください (通常は自動的に適当なパーミッションに設定されます)。
一方、公開鍵 identity.pub は秘密に保つ必要はありません (もちろん他人に書き換えられては困りますが)。
次の作業は出来上がった公開鍵をサーバに登録することです。 そのためにはサーバ側の ‾/.ssh/known_hosts に クライアントの identity.pub (の中身)を追加してやる必要があります。 identity.pub は秘密にする必要はなく、テキストファイル形式なので、 通常の電子メールや FTP でサーバに移し、 通常のテキストエディタや「cat >> (filename)」コマンドで known_hosts に加えます。 known_hostsは一行に一つの公開鍵が書いてある形式になりますので、 注意して下さい。
研コンのマシン間で sshセッションを開くこともありうるので、 自分の公開鍵を known_hosts の第1行目として登録しておきましょう。 具体的には
とします。 ‾/.ssh ディレクトリは NFS で共有されていますので、 これで自動的に fuji, suzuka, aida の3マシンをそれぞれ サーバとみなして公開鍵を登録できたことになります。% cd ‾/.ssh % cp identity.pub known_hosts
% slogin aida少し待ってから、パスフレーズを尋ねてくるので、 鍵の生成時に入力したパスフレーズを入力します。 間違っていなければ、通常の rlogin と同様に aida へのログインができます。 通常通り、exitなどでログアウトします。 ただし暗号化をしている分だけ、 セッションの開始時や普段の応答が多少遅くなります。
もしパスフレーズが間違っていたり、公開鍵の登録がうまくいってなかったり、 あるいはサーバ側で sshd が動いていなかったりすると、 slogin による安全なセッションをあきらめて通常の rlogin が実行されるので、注意して見ている必要があります。
% ssh aida uname -nsloginのときと同じようにパスフレーズを入力すると、 リモートでuname -nコマンドが実行され、 相手のホスト名 (aida) が返ってきます。
% scp aida:.ssh/identity.pub ./test.pubリモートコピーが成功しましたか?
% ssh -n aida xclock &-f をつけると、バックグラウンド実行と -n が自動的に行なわれます。
% ssh -f aida kterm
% ssh-agent tcshこれで一度パスフレーズを入力しておけば、 以降はパスフレーズなしで sコマンドが実行できます。 ただしくれぐれもパスフレーズを忘れてしまわないように注意!
以上で SSH の簡単な使い方の説明を終ります。
もっと細かい説明は man page や 日本語訳版 ssh-FAQ などを参考にして下さい。
Secure Shell について / 研コン室 / 月曜相談員 森川