WindowsあるいはUNIXの端末から, SSHを使ってリモートホスト(SSHサーバ)にアクセスする方法を説明する.
Macintosh用クライアントについては, Webページ[n2]を参照のこと.
Windows を端末にしてリモートホストにSSH を使ってアクセスできる. ログインする方法は, 従来とほぼ同様にリモートホストのパスワードを使える. しかしSSHの内部処理は従来の方法と異なって, パスワードを暗号化して転送するので安全である. もっと安全な認証方法を使いたい場合には, 公開鍵認証を使ってリモートログインできる.
Windows環境では, いくつかのツールがあるが, 端末エミュレータ TeraTerm と SSH 用のモジュールTTSSHを組み合わせでSSH1を利用するのが手軽で便利なので, この方法について説明する*13. まだインストールされていない場合には, 「7.1 Windows へのインストレーション」を参照してインストールすること.
次に, Windows端末にリモートホストのXクライアントをセキュアに転送する機能であるX11のフォワーディング機能を説明する. 最後に, パスワードをネットワーク上で転送する TCP 通信を, ポートフォワーディング機能を利用してセキュアに行なう例を紹介する.
Windows のメニューバーから「スタート」→「プログラム(P)」→「Tera Term Pro」(フォルダ) →「Tera Term Pro」(プログラム) と選択して ttermpro を起動する(図 7).
図 7 ttermpro を起動したときの画面
Host: に接続先のホスト名を入力 (ここでは server1としている) し, ServiceはSSHを選択してOKをクリックする.
接続先のホストに初めて接続するときには, 図 8 のようなメッセージが表示されるので, Add this machine and ... をチェックして,「Continue」をクリックする*14.
図 8 接続先ホストを確認するための画面
ユーザ認証の画面が表示されるので, User nameとPassphraseに接続先ホストのログインネーム (ここでは foobarとしている) とパスワードを入力する(図 9). また, 下部の3つの選択肢についてはここではUse plain password to log inを選択して, 「OK」をクリックする.
図 9 接続先ホストのユーザ名とパスワードを入力するための画面
正常に認証されれば, TeraTermのウィンドウに接続先ホストのshellプロンプトが現れる. これで, SSHによる暗号化された通信路上での通信が可能になる*15.
公開鍵認証によるリモートログインを行なうためには, ユーザが前もって公開鍵の準備を行なう必要がある. 本節では使い方の説明をするので, 未設定の場合には まず7.1.2節を参照して設定すること.
公開鍵認証によるログインは, ユーザ認証の画面(図 10)で, 以下の入力をして, 「OK」をクリックする.
Windows端末にリモートホストのXクライアントをセキュアに転送する機能である. SSHサーバの管理者が特に禁止していない限り利用できる*16.
この機能を使うには Windows でXサーバを起動する必要がある.
TTSSHでは, X11フォワーディングを行なう場合には, リモートホストに接続する前に,以下の設定を行なう.
次に, メニューバーから「File」→「New connection」を選択し, ホストに接続する. 正常に接続されると, shellのプロンプトが現れる.
ここでxtermなどを実行して, それが表示されれば良い. X11フォワーディングがうまく動作しない場合の確認の方法については6.2.4節を参照のこと.
SSH のポートフォワーディング機能を利用して, POPの通信を暗号化してセキュアに使うことができる. その方法を説明する.
TeraTermを起動して, メニューバーから「Setup」→「SSH fowarding...」を選択する. 表示されたダイアログ( 図 11 )から「Add」をクリックする.
図 11 フォワーディングの設定を行なうための画面
ポートフォワーディングの設定を行なうための画面 ( 図 12 ) が表示される. 「Foward local port」を選択し, 右のボックスに12345 を入力する*17. 「to remote machine」には, メイルサーバ名を入力し,「port」にはpop3を選択する.入力が終えたら「OK」をクリックし, 前のダイアログに戻り「OK」をクリックしてダイアログを閉じる.
図 12 pop3をSSHのポートフォワーディングで使用するための設定例
メニューバーから「Setup」→「Save Setup」と選択して, ここまでの設定を保存する(図 13). ファイル名には, 初期値のTERATERMではなく別のファイル名を指定して保存した方が後で混乱しない. ここではportforwardとする.
図 13 ポートフォワーディングのための設定を保存する画面
ここまで終了したら一旦TeraTermを終了する.
TeraTermを起動し, メニューバーから「Setup」→「Restore setup」を選択する. ダイアログ(図 14)が表示されるので, 図 13で設定を保存したファイルを選択し,「開く(O)」をクリックする.
図 14 ポートフォワーディングの設定を読み込む画面
次にメニューバーから「File」→「New connection」を選択する. 「Host:」には受信用メイルサーバ(ここではmail.kek.jpとしている)を入力し, 「Service」はSSHを選択して「OK」をクリックする(図 15).
図 15 メイルサーバに接続する例
表示された認証ダイアログが表示されるので, 接続先ホストのログインネーム, パスワードなどを入力する. パスワード認証を使う場合には図 9(p*), RSA認証を使う場合には図 10(p*)を参照のこと.
ここでは, メイラーに Netscape Communicator4.6日本語版のNetscape Messengerを使用して説明する.
Netscape Messengerを起動し,「編集(E)」→「設定(E)」を開く.
「メールとグループ」の中から「メールサーバ」を選択する(図 16).
図 16 メイルサーバを設定する画面
「受信メールサーバ(I)」を設定する.「追加(A)」をクリックし, 「メールサーバのプロパティ」ダイアログを開く(図 17).
「サーバ名(S):」にはlocalhost:12345を入力する. ここで12345は図 12 で指定したポート番号である. 「サーバの種類(T)」は「POP3サーバ」を選択し, 「ユーザ名(U)」をメイルサーバにおけるユーザ名に設定する. ここでは foobar としている.
その他の設定がよければ,「OK」をクリックして「設定」ダイアログ(図 16)に戻る. 他に必要な設定を行なったら「OK」をクリックして「設定」ダイアログを閉じる.
図 17 メイルサーバの設定例
Netscape Messengerで「受信」をクリックして新規メイルの取り込みを行なう. パスワードの入力を促されるので, メイルサーバにおけるアカウントのパスワードを入力する.
自分あてにメイルを送信してみて正しく受信が行なえるか確認することを薦める.
メイルの受信が終えたら, port fowardingのために開いてあるTeraTerm を終了させる.
SSH のポートフォワーディング機能を利用して, ftpのパスワード入力を暗号化してセキュアに使うことができる. その方法を説明する.
セキュアなPOP の場合と同様なので, 6.1.4.1節を参照のこと.
ただし SSH Port Forwarding の画面(図 12)で, 「to remote machine」には, ftp サーバ名を入力し,「port」にはftpを選択する.
セキュアなPOP の場合と同様なので, 6.1.4.2節を参照のこと.
ただし Tera Term: New connection の画面(図 15)の, Host:には ftp サーバ名を入力する.
ここではFTPExplorerを例にして説明する.
FTP Explorerを起動してメニューバーから「ツール(T)」→「接続(C)」を選択する.
「プロファイル名(N)」に任意の適当な名称を入力して,「ホストのアドレス(H)」にはlocalhost 「ポート(O)」には12345を入力して,「PASVを使用(M)」をチェックする. 「ログイン(L)」にはftpサーバのログイン名を入力し,「パスワード(P)」にログイン名のパスワードを入力する(図 18). これで,「接続(C)」をクリックしてftpサーバに接続することができ, ファイルの送受信が可能になる.
図 18 FTP Explorer のサーバへの接続のための画面
この方法では, パスワードは暗号化されたSSHの通信路を通るが, 転送されるデータは暗号化された通信路を通らない.
UNIXで使う簡単な方法は, パスワード認証を使う方法である. 従来のtelnetとほぼ同様に使用できる. 認証を強化したい場合には, 公開鍵認証を使用する. この場合にはユーザが前もって公開鍵の準備を行なう.
上記2つの方法の使い方を説明する. 次に, リモートホストのXクライアントをXサーバにセキュアに転送する機能である, X11のフォワーディング機能を説明する. 最後に, パスワードをネットワーク上で転送する TCP 通信を, ポートフォワーディング機能を利用してセキュアに行なう例を紹介する. 主としてSSH1で説明するが, SSH2でも操作方法はほぼ同じである.
SSHコマンド*18でリモートホストにログインする例を示す*19. ユーザが特に何も設定をしていないとパスワード認証が行なわれる.
lune % ssh soleil
Host key not found from the list of known hosts.
Are you sure you want to continue connecting (yes/no)? yes
Host ' soleil ' added to the list of known hosts.
yashiro@ soleil 's password: my-PW
Last login: Wed Jun 2 09:13:17 1999 from lune.kek.jp
Sun Microsystems Inc. SunOS 5.5.1 Generic May 1996
上記の例ではローカルホスト lune からSSHサーバsoleilにログインしている.
3行目の “Are you sure ....” の問い合わせは, そのSSHサーバに初めてアクセスする場合に, 信頼できるホストと見なせるかどうかを確認しているものである. ここでは, 信頼できるとして “yes” と答えている. Public host-keyがホームディレクトリのknown host key データベースに保存される. この問い合わせは, このホストに最初にログインするときにだけ行なわれ, 2度目以降のログインではない.
次に正しいパスワードを入力すると, ログインができる*20. ここではパスワードの入力を my-PWと書いているが, 実際には表示されない. パスワード入力の時点では, ネットワークに流れるデータは暗号化されているので, 生のパスワードが盗聴されることを避けられる.
公開鍵認証を使用するためには, ユーザのprivate-keyと public-keyを用意する. まずSSHクライアント側でssh-keygenを実行して作成する.
ssh-keygenの実行中にpassphraseの入力が要求される. passphraseはファイルに保存する private-keyを暗号化して保護するためのパスワードである. 作成した本人だけがしっているものなので, 本人の認証ができる*21. 公開鍵認証でログインする時には入力が要求される. スペース文字を使えるので, 自分で覚えやすく, 他人に推測されにくい文章となるような文字列を選んで入力する.
以下に ssh-keygen の実行例を示す. コマンド入力後しばらくして鍵の保管場所の問い合わせがある. 標準値で良いのでリターンキーを押す. 次のpassphraseの問い合わせに対して, 例ではthis is my passphraseと入力している.
上記の処理で, 公開鍵認証を使用するための1組の鍵が作られる. 次にidentification ファイル整備する.
次にpublic-keyのファイルである identity.pub をSSHサーバ側に転送して, authorized keyデータベースにエディタ等で登録する. サーバがSSH1とSSH2の双方をサポートしている場合には, クライアントが SSH1の場合には $HOME/.ssh/authorized_keys に, クライアントがSSH2の場合には $HOME/.ssh2/ authorization に登録する.
転送したファイルに適当な名称をつけて $HOME/.ssh2/ に置く. 次に ファイルの名称を $HOME/.ssh2/authorization に追加する. 例えばファイルの名称を id_dsa_1024_a.lune とすると以下のようになる.
公開鍵認証の設定を行なった SSHサーバにログインする例を示す. 例ではローカルホスト lune からSSHサーバsoleilにログインしている.
SSHサーバに初めてアクセスする場合には, パスワード認証の場合と同様に, 信頼できるホストかどうかの問い合わせがある. パスワード認証の場合と全く同じなので, この例では省略している.
次に, 正しいpassphrase を入力する*22と, ログインできる. ここではpassphrase が this is my passphrase と表示されているが, 実際には表示されない.
Passphrase の入力を間違えたりすると, 公開鍵認証に失敗する. この場合には, 続いてパスワード認証が行なわれる.
公開鍵認証を設定してもパスワードが求められる場合は, 以下のような原因が考えられる.
authorized keyデータベースの設定を確認する. クライアントとサーバの対応関係や SSH のバージョンの対応関係などを調べる. 追加操作時のミスなどのこともある.
以下に例を示す. 3行目に “Bad passphrase.” と公開鍵認証に失敗したことを示すメッセージが表示されている.
lune % ssh soleil
Enter passphrase for RSA key 'yashiro@ lune.kek.jp': this is bad passphrase
Bad passphrase.
yashiro@ soleil 's password: my-PW
Last login: Wed Jun 2 09:13:17 1999 from lune.kek.jp
Sun Microsystems Inc. SunOS 5.5.1 Generic May 1996
設定の確認は, ssh コマンドをデバッグモード(-v)で動かして, 表示されるトレース情報によりできる.
従来のrshと同様にパスワードの入力なしにリモートのホストを利用する方法には, rhosts公開鍵認証, rhost認証, それとssh-agentを使用する方法がある.
Rhosts 認証ではサーバは, クライアントをホスト名だけで認証するだけなので, セキュリティ上の問題があり, 利用できるような設定をするサーバは多分ない. これはSSH1ではサポートされているが, SSH2ではサポートされていない.
Rhosts公開鍵認証は, 許すサーバがあるだろう. ただし, これもSSH1だけがサポートしている.
ssh-agentを使用して, 認証をフォワードすればパスワードの入力なしにリモートのホストを利用することができる. SSH2, SSH1ともにサポートしているが, 本稿ではこの方法は説明しない. 文献[1]などを参照のこと.
Rhosts公開鍵認証とrhosts 認証では, 従来の rhosts関連の /etc/hosts.equivおよび $HOME/.rhostsに加えて, SSH固有の /etc/shosts.equivおよび $HOME/.shosts を参照する. Rshと明確に区別するためにshostsの方を設定するのが良い.
Rhosts 公開鍵認証を使用する場合には, 前もって SSH クライアント側の public host-key をサーバに転送して, known host key データベースに登録しておく *23.
X11のフォワーディングは, SSHサーバの管理者が特に禁止していない限り, 自動的に設定される.
X11のフォワーディングでは, XのDISPLAY 変数とXAUTHを利用している. ユーザがリモートホストの $HOME/.cshrcなどで, DISPLAY 変数を設定していると動作しなくなるので, その場合には削除する必要がある.
SSHでログインしたホストで, xtermなどを実行して, それが表示されれば良い*24. 表示されない場合には, まず DISPLAY 変数の値とXAUTHの値を確認する. 以下の例では, SSHでログインした soleilで確認している例である.
soleil% echo $DISPLAY
soleil:10.0
soleil% xauth list
soleil:10 MIT-MAGIC-COOKIE-1 ae4a03bc1a63e3e2ed1ae85fb788a093
soleil /unix:10 MIT-MAGIC-COOKIE-1 ae4a03bc1a63e3e2ed1ae85fb788a093
DISPLAY 変数の値は, ログインしたホストの名, 続いて “:”, 次に10以上のディスプレイ番号, スクリーン番号 “.0” になっていれば良い. XAUTHの値は数行表示されるが, そのなかに先頭がDISPLAY変数の値と同じホスト名とディスプレイ番号の行 (例ではsoleil:10) があれば良い.
SSH の port forwarding 機能を利用することにより, パスワードをセキュアな経路で送ることができる.
接続する例を示す. sshコマンドの “-L” オプションにより, ローカルホストに12345番ポートを割り当て*25, リモートホスト mail の110番ポート(pop3 ポート)と接続している.
次に Netscape Communicatorの Netscape Messenger などで, ローカルホストの12345番ポートを経由して POPサーバに接続できる. 具体的な接続の方法は 6.1.4.3節を参照のこと.
SSH を利用した, セキュアなファイル転送は3つの方法が考えられる. 第1は, SSH1およびSSH2でサポートされているscp の利用である. 第2は, sftp の利用である. これはSSH1ではサポートされていない. SSH2が利用できる環境では, sftpを利用するのがもっとも良い. 第3は, SSH1 の環境で Scp に不満の場合の解決策である. ftp を SSH の port forwarding 機能を経由して利用することにより, パスワードをセキュアな経路で送ることができる.
入力例を示す. soleil のホームディレクトリにある fileという名称のファイルを, カレントディレクトリに転送している.
lune% scp -p soleil:file . yashiro@ soleil 's password: my-PW file | 18 KB | 6.1 kB/s | ETA: 00:00:00 | 100%
-r オプションを使うことにより, ディレクトリ単位の複写も可能である.
lune% scp -pr soleil:directory . yashiro@ soleil 's password: my-PW file1 | 247 KB | 35.3 kB/s | ETA: 00:00:00 | 100% file2 | 1 KB | 1.6 kB/s | ETA: 00:00:00 | 100%
SSH の port forwarding 機能と, PASSIVE モードがサポートされている ftp*26 を利用することにより, ftp 利用の際のパスワード入力をセキュアな通信で行なうことができる.
入力例を示す. sshコマンドの “-L” オプションにより, ローカルホストに12345番ポートを割り当て, リモートホスト soleil の21番ポート(ftp ポート)と接続している.
次に, ローカルホストの別のウィンドウから, ローカルホストの12345番ポートにftpで接続する. ここで要求されるパスワードはリモートホスト soleil のパスワードである.
lune% ftp localhost 12345
Connected to localhost.
220 soleil FTP server (Version wu-2.4(3) Mon Oct 14 17:53:16 JST 1996) ready.
Name (localhost:yashiro):
331 Password required for yashiro.
Password: my-PW
230 User yashiro logged in.
ftp> passive
Passive mode on.
ftp>
この場合に, 暗号化されて通信が行なわれるのは, パスワードなどftpの制御命令だけで, データ自体の通信は暗号化されない.
SSH2では sftp というセキュアな ftp がサポートされている. しかしこれはサーバとクライアントの双方が SSH2に場合だけに限られる. sftpの場合には, 制御命令およびデータとも暗号化される.