SSH(1) System Reference Manual SSH(1)
名前
- ssh - OpenSSH 安全なシェルクライアント(遠隔ログインプログラム)
書式
ssh [-l login_name] [hostname | user@hostname] [command] ssh [-afgknqstvxACNPTX1246] [-c cipher_spec] [-e escape_char] [-i identity_file] [-l login_name] [-m mac_spec] [-o option] [-p port] [-L port:host:hostport] [-R port:host:hostport] [hostname | user@hostname] [command]説明
ssh (Secure Shell) は、遠隔地のマシンにログインし、遠隔マシン上で コマンドを実行するためのプログラムである。これは rlogin や rsh の 代替として開発されたものであり、安全でないネットワーク上にある2 台の相互に信頼できないホスト間において、暗号化された安全な通信を 提供する。また、X11 の接続や任意の TCP/IP ポートを安全なチャネル 上で中継することもできる。
ssh は指定されたホスト名に接続してログインする。ユーザは、いくつ かの方式のうちの1つを使って自分のアイデンティティーを証明しなけ ればならないが、この方式は使用するプロトコルのバージョンに依存す る。主なものを以下に示す:
SSH プロトコルバージョン1
まず、ログイン元のマシンがログイン先のマシン上の /etc/hosts.equiv または /etc/ssh/shosts.equiv に記述されており、かつユーザ名が両者 のマシンで同じであれば、そのユーザはその場でログインを許可される。 次に、リモートマシン上の当該ユーザのホームディレクトリに .rhost または .shosts が存在し、かつその中にクライアントのマシン名および そのマシンにおけるユーザ名を記述した行があれば、そのユーザはログ インを許可される。これは安全とはいえないため、この種の認証方式だ けの場合は通常認めていない。
2番目の認証方式(そして最初のものも)は、RSA ベースのホスト認証 と rhosts や hosts.equiv の方式を組み合わせたものである。これは、 $HOME/.rhosts, $HOME/.shosts, /etc/hosts.equiv, /etc/ssh/shosts.equiv でログインが許可されていても、さらにサーバがクライアントのホスト 鍵(「ファイル」の章の /etc/ssh/ssh_known_hosts および $HOME/.ssh/known_hosts を参照)を検査して、それでログインを許可 する方式である。この認証方式を使うと、IP 詐称 (spoofing)、DNS 詐 称、ルーティング詐称といったセキュリティホールからホストを守れる。 [ 管理者の方へ:一般的に言って /etc/hosts.equiv, $HOME/.rhosts お よび rlogin/rsh プロトコルはあまり安全なものではないので、特にセ キュリティが要求されるところでは使わないようにすべきである。]
3番目の認証方式として、ssh は RSA ベースの認証をサポートしている。 このスキームは公開鍵暗号化に基づくものである。いくつかの暗号シス テムでは暗号化と複合化が各々異なった鍵で行われるが、この場合、暗 号化用鍵から復号化用鍵を取り出すのは不可能である。RSA もこのよう なもののうちの1つである。考え方としては、各ユーザは認証のための 公開/秘密鍵のペアを前もって作成しておく。サーバは公開鍵を知って おり、ユーザだけが秘密鍵を知っている。$HOME/.ssh/authorized_keys には、ログインを許されたユーザの公開鍵のリストが入っている。ユー ザがログインする際、ssh プログラムはどの鍵のペアを認証用に使用す るのかをサーバに知らせる。サーバはその鍵が許可されているかどうか を調べ、許可されていれば、ユーザ(正確にはユーザ側で動いている ssh プログラム)に対してチャレンジを送る。チャレンジとは、ユーザ の公開鍵で暗号化された乱数である。チャレンジは、適切な秘密鍵を使 ってのみ復号化することができる。ユーザ側のクライアントは自分の秘 密鍵でチャレンジを復号化して自分が秘密鍵を知っていることを証明す るが、それをサーバに開示することはしない。
ssh は RSA 認証プロトコルを自動的に実装する。ユーザは ssh-keygen(1) を走らせて、自分の RSA 鍵のペアを作成する。これにより秘密鍵はユ ーザのホームディレクトリの下の $HOME/.ssh/identity に、公開鍵は $HOME/.ssh/identity.pub に格納される。ユーザは、identity.pub を リモートマシン上の自分のホームディレクトリ配下に $HOME/.ssh/authorized_keys としてコピーしなければならない (authorized_keys ファイルは従来の $HOME/.rhosts ファイルに相当す るもので、1行に1つの鍵を保持するが、1行は非常に長い)。これ以 降、ユーザはパスワードなしでログインできるようになる。RSA 認証は rhosts 認証に比べて格段に安全である。
RSA 認証を使うためのもっとも便利な方式として、認証エージェントを 使う方法がある。詳細は ssh-agent(1) を参照されたい。
もし他の認証方式が失敗すると、ssh はパスワード認証を行おうとする。 この際チェックのためにパスワードがリモートホストに送られるが、す べての通信は暗号化されており、そのネットワークが誰かに盗聴されて もパスワードが見られてしまうことはない。
SSH プロトコルバージョン2
ユーザが接続をする際、プロトコルバージョン2という異なった認証方 式を使うこともできる。まず、クライアントは公開鍵方式による認証を 試みる。これに失敗すると、パスワード認証が試される。
公開鍵方式は前節で述べた RSA 認証によく似ているが、DSA または RSA アルゴリズムを使用するところが異なる。クライアントは自分の秘密鍵 である $HOME/.ssh/id_dsa を使ってセッション識別子に署名を行い、そ の結果をサーバに送付する。サーバではそれに合致する公開鍵を $HOME/.ssh/authorized_keys2 から検索し、両方の鍵が登録されていて かつ署名が正しければアクセスを許可する。セッション識別子は共有の Diffie-Hellman 値から取り出されるが、これはクライアントとサーバの みが知っている。
公開鍵認証が失敗するかまたは使用できない場合、パスワードを暗号化 してリモートホストに送り、ユーザの独自性を証明してもらうことがで きる。このプロトコル2の実装では、Kerberos や S/Key 認証はまだサ ポートされていない。
プロトコル2では追加メカニズムを提供することにより、信頼性(トラ フィックは 3DES, Blowfish, CAST128 または Arcfour を使って暗号化 される)や完全性(hmac-sha1, hmac-md5)を向上させている。プロト コル1では接続の完全性を確立するための強力なメカニズムが不足して いることに注意せよ。
ログインセッションと遠隔実行
サーバによりユーザの正当性が受け入れられると、サーバは与えられた コマンドを実行するか、またはユーザにそのマシンにログインさせ、リ モートマシン上でユーザに通常のシェル環境を提供する。リモートコマ ンドまたはリモートシェルとのすべての通信は自動的に暗号化される。
擬似端末(通常のログインセッション)が与えられている場合は、ユーザ は ~. で切断したり、~^Z で ssh を保留したりできる。すべての中継コ ネクションの一覧は ~# で表示でき、また中継された X11 や TCP/IP コネ クションのセッションブロックが終了待ちになっている場合、~& でバック グラウンドに回すことができる(ユーザシェルがアクティブの場合はシェ ルがハングアップしてしまうので、これは行うべきではない)。使用可能 な全エスケープシーケンスは ~? で表示できる。
一つのチルダ文字は ~~ を使って送ることができる(チルダに続くこれ以 外の文字についてはすでに前述した)。エスケープ文字の後は、これを特 殊文字として扱うために常に改行文字でなければならない。エスケープ文 字は設定ファイルやコマンドラインから変更することができる。
擬似 tty が割り当てられなかった場合、そのセッションは透過となり、 バイナリデータを安全に転送するのに使えるようになる。ほとんどのシス テムにおいて、エスケープ文字を 'none' にすると、たとえ tty が使われ ていてもそのセッションは透過となる。
リモートマシン上のコマンドまたはシェルが存在し、かつすべての X11 や TCP/IP コネクションが閉じられると、セッションは終了する。リモー トプログラムの終了ステータスは ssh の終了ステータスとして返される。
X11 と TCP フォワーディング
ユーザが X11 を使っている(DISPLAY 環境変数がセットされている)場 合、X11 ディスプレイへの接続は自動的にリモート側に中継される。動作 としては、シェル(またはコマンド)から起動されたすべての X11 プロ グラムは暗号化された通信路を通り、本当の X サーバへの接続がローカ ルマシンからなされる。ユーザは DISPLAY 環境変数を手作業でセットす るべきではない。X11 接続の中継はコマンドラインと設定ファイルの双方 で行える。
ssh によってセットされた DISPLAY の値はサーバマシンを指しているが、 画面番号は 0 より大きくなる。これが通常の動作であり、ssh は暗号化 された通信路上で接続を中継するためのサーバマシン、サーバマシン上 に「プロキシの」 X サーバを生成する。
ssh はサーバマシン上で Xauthority データのセットアップを自動的に 行う。この目的のために、ssh はランダムな認証クッキーを生成し、そ れをサーバ上の Xauthority に格納する。そしてすべての中継された接 続がこのクッキーを運ぶことをチェックし、接続がオープンする時それ を本当のクッキーで置き換える。本当の認証クッキーがサーバに送られ ることはない(またクッキーは平文では送られない)。
ユーザが認証エージェントを使っている場合、エージェントへの接続は、 コマンドラインや設定ファイルで禁止されていない限り自動的にリモー ト側へ中継される。
任意の TCP/IP コネクションについて安全な通信路を通るように、コマ ンドラインまたは設定ファイルで設定することもできる。電子財布への 安全なコネクションを取り扱う TCP/IP アプリケーションもあるだろう し、フアーウォールを通過するものもあるだろう。
サーバ認証
ssh では、過去に使用したことのあるすべてのホストに関しての ID を保持 しているデータベースを管理しており、その保守と検査が自動的に行われる。 RSA ホスト鍵はユーザのホームディレクトリ配下の $HOME/.ssh/known_hosts に、プロトコルバージョン2で使われる DSA ホスト鍵は $HOME/.ssh/known_hosts2 に格納されている。さらに、既知のホストについ ては /etc/ssh/ssh_known_hosts と /etc/ssh/ssh_known_hosts2 が自動的 に使われる。新しいホストはすべて自動的にユーザのファイルに追加される。 あるホストの ID が変更されると、ssh はこれに関する警告を発し、パスワ ード認証を不可にすることで、ユーザのパスワードを奪おうとするトロイの 木馬に備える。このメカニズムはまた、それでもなお man-in-the-middle (訳註:TCP セッションの乗っ取り)アタックで暗号を回避しようとする試 みを排除する。StrictHostKeyChecking オプション(後述)により、ホスト 鍵が不明または変更されたマシンへのログインを禁止することができる。
オプション
-a
- 認証エージェント接続の中継を禁止する。
-A
- 認証エージェント接続の中継を許可する。これは設定ファイル中で各 ホスト毎にも指定することができる。
-c blowfish|3des
- セッションを暗号化するための暗号化方式を選択する。デフォルトで は 3des が使われる。これは安全であるとされている。3des(トリプ ル des)は3つの異なった鍵で暗号化−復号化−暗号化を行う。これ は、もはや ssh では完全にサポートされなくなった des 暗号化に比 べればより安全であると思われる。blowfish は高速なブロック暗号 方式であり、非常に安全でかつ 3des よりさらに高速である。
-c cipher_spec
- さらにプロトコルバージョン2では、複数の暗号方式を優先度の高い 順にカンマ区切りで指定することができる。詳細は暗号方式を参照。
-e ch|^ch|none
- pty で動作するセッションのエスケープ文字を設定する(デフォルト は '~')。エスケープ文字は行の先頭でのみ認識される。エスケープ 文字の後にドット('.')が続くと接続が閉じられ、コントロール-Z だと接続を保留し、エスケープ文字そのものの場合、エスケープ文字 を一文字送信する。エスケープ文字を 'none' にするとすべてのエス ープを無効にし、そのセッションを完全に透過にする。
-f
- コマンドを実行直前にバックグラウンドに切り替えるように ssh に 指示する。これは、ssh がパスワードやパスフレーズを要求するが、 これをバックグラウンドで指定したい場合に有用である。これは暗に -n を指定したことになる。リモートサイトで X11 のプログラムを 起動する際は、ssh -f host xterm などとする方がよいだろう。
-g
- リモートホストからローカルにフォワードされたポートへの接続を許 可する。
-i identity_file
- RSA または DSA 認証に使われる ID(秘密鍵)ファイルを選択する。 デフォルトはユーザのホームディレクトリにある $HOME/.ssh/identity である。ID ファイルは設定ファイルにおいてホスト毎に指定するこ ともできる。複数の -i オプション(および設定ファイルにおいて 複数の ID ファイル)を指定することも可能。
-k
- ケルベロスのチケットと AFS トークンの中継を禁止する。これは設定 ファイル中でホスト毎に指定することもできる。
-l login_name
- リモートマシン上でログインする際のユーザ名を指定する。これは設 定ファイル中でホスト毎に指定することもできる。
-m mac_spec
- さらにプロトコルバージョン2では、MAC(message authentication code -- メッセージ認証コード)アルゴリズムをカンマで区切って優 先度の高い順に指定することができる。詳細は MAC というキーワード を調べてみて欲しい。
-n
- /dev/null から stdin へリダイレクトする(実際には、stdin から の読み込みを禁止する)。ssh をバックグラウンドで起動する場合は これが指定されなければならない。このオプションは、リモートマシ ン上で X11 のプログラムを動かすためのトリックとしてもよく知ら れている。たとえば ssh -n shadows.cs.hut.fi emacs & とやると shadows.cs.hut.fi 上で emacs が起動するが、同時に暗号化チャネ ル上で X11 コネクションが自動的に中継されるようになる。ssh プ ログラムはバックグラウンド上に置かれる。(ssh がパスワードやパ スフレーズを問い合わせる場合はこれは動作しない。-f オプション を参照のこと)。
-N
- リモートコマンドを実行しない。これは単にポートの中継だけを行い たい場合に役立つ(プロトコルバージョン2のみ)。
-o option
- 設定ファイル中で使われる書式の中でオプションを与えるのに使用さ れる。これは別々のコマンドラインフラグがない場合にオプションを 指定するのに便利である。このオプションの書式は、設定ファイルの 各行にある書式と同じである。
-p port
- リモートホストへ接続するポート。これは設定ファイル中でホスト毎 に指定することもできる。
-P
- 送出コネクションに関して非特権ポートを使用する。あなたのファイ アーウォールが特権ポートからのコネクションを許可していない場合 に使用できる。このオプションは、古いサーバのために RhostsAuthentication および RhostsRSAAuthentication をオフにす ることに注意せよ。
-q
- 静粛モード。すべての警告や診断メッセージを抑制する。致命的エラ ーのみが表示される。
-s
- リモートシステムのサブシステムを呼び出すための要求に使われるこ とがある。サブシステムは SSH2 プロトコルの機能であり、SSH を他 のアプリケーション(すなわち sftp)のため安全な転送路として使 えるというもの。サブシステムはリモートコマンドとして指定される。
-t
- 強制的に擬似 tty を割り当てる。これは、リモートマシン上でとて も便利に使える任意の画面ベースのプログラム、すなわちメニュー形 式のサービスを実行するのに使える。-t を複数個指定すると、ssh がローカルの tty を持たない場合でも強制的に tty を割り当てる。
-T
- 擬似 tty の割り当てを行わない。
-v
- 冗長モード。ssh の処理について逐次デバッグメッセージを表示させ る。これは接続や認証、そして設定の問題をデバッグするのに役立つ。 -v を複数指定すると冗長度が増す。最高は3である。
-x
- X11 の中継を行わない。
-X
- X11 の中継を行う。これは設定ファイル上でホスト毎に設定される場合 もある。
-C
- 全データ(stdin, stdout, stderr, および中継された X11 や TCP/IP のデータも含む)の圧縮を要求する。圧縮アルゴリズムは gzip(1) で 使われるのと同じものであり、圧縮オプション(後述)により 'level' を制御できる。モデム回線やその他の低速回線で圧縮をかけると効果 があるが、高速回線ではかえって遅くなる。デフォルト値は設定ファ イル上でホスト毎に設定できる。後述の圧縮オプションを参照のこと。
-L port:host:hostport
- ローカル(クライアント)ホスト上の指定されたポートを、指定された リモートホスト上の指定ポートに中継(フォワード)するように指示す る。これは以下のように動作する:ローカル側で listen するべきポー トのソケットを割り当てておき、このポートに対して接続が行われたら、 そのコネクションは安全なチャネルを経由して中継され、リモート側の ホスト host の hostport ポートとの間で接続が確立する。ポートの中 継は設定ファイルで指定することもできる。特権ポートの中継を行える のは root のみである。IPv6 アドレスも port/host/hostport という 別の書式で指定できる。
-R port:host:hostport
- リモート(サーバ)側ホスト上の与えられたポートを、ローカル側の 指定ホスト:ポートに中継する。これは以下のように動作する:リモ ート側で listen するべきポートのソケットを割り当てておき、この ポートに対して接続が行われたら、そのコネクションは安全なチャネ ルを経由して中継され、ローカルマシンからホスト host の hostport ポートとの間で接続が確立する。ポートの中継は設定ファイルで指定 することもできる。特権ポートの中継を行えるのは root のみである。
-1
- プロトコルバージョン2のみを使用する。
-2
- プロトコルバージョン2のみを使用する。
-4
- IPv4 アドレスのみを使用する。
-6
- IPv6 アドレスのみを使用する。
設定ファイル
ssh はその設定データを、コマンドラインオプション、ユーザの設定ファ イル($HOME/.ssh/config)、システム全体の設定ファイル( /etc/ssh/ssh_config)のうちのいずれかから、ここで指定された順に取得 する。各パラメータは、最初に取得したものが使われる。設定ファイルは `Host' 指定で区切られたセクションで構成されるが、そのセクションの設 定値が適用されるのは、指定の中で与えられたパターンにマッチしたホス トに対してのみである。指定されたホスト名のパターンはコマンドライン で与えられたホスト名とマッチングされる。
各パラメータのうち最初に現れたものの値が使用されるため、ホスト固有 なものほどファイルの先頭に近いところに記述し、一般的なデフォルト値 は最後の方に置くようにする。
設定ファイルは以下のような書式で記述する;
空行および '#' で始まる行はコメントである。
それ以外の場合、各行は「キーワード 引数」のような書式を持つ。指定 可能なキーワードとそれらの意味を以下に示す(設定ファイルでは大文 字と小文字を区別することに注意されたい)。
Host
- (次の Host キーワードまでの)以下の宣言を、キーワードに続 くパターンのうちのいずれかにマッチしたホストに対してのみに 制限する。'*' と '?' はパターン中のワイルドカードとして使え る。パターンとしての1つの '*' は、すべてのホストのための グローバルデフォルトを表すのに使える。ホストはコマンドライ ンで与えられた hostname 引数である(すなわちマッチングまで は、ホスト名は正式ホスト名には変換されない)。
AFSTokenPassing
- AFS トークンをリモートホストに渡すかどうかを指定する。この キーワードの引数は 'yes' または 'no' でなければならない。
BatchMode
- 'yes' に設定されると、パスフレーズ/パスワードの問い合わせ は行われなくなる。このオプションは、スクリプト内やその他の バッチジョブなど、パスワードを入力するユーザがいない場合に 役立つ。引数は 'yes' または 'no' でなければならない。
CheckHostIP
- このフラグが 'yes' に設定されると、ssh は known_hosts ファ イル内の IP アドレスのチェックを行うようになる。これにより、 ssh は DNS の詐称でホスト鍵が変わったのを検出できるように なる。このオプションが 'no' に設定されると、このチェックは 行われない。
Cipher
- プロトコルバージョン1において、セッションを暗号化するのに 使用する暗号化方式を指定する。現在 `blowfish' と `3des' が サポートされている。デフォルトは `3des' である。
Ciphers
- プロトコルバージョン2で許可する暗号方式を、優先度の高い順 に指定する。複数の方式を指定する場合はカンマで区切る。デ フォルトは以下の通り: `3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes128-cbc, aes192-cbc,aes256-cbc,rijndael128-cbc,rijndael192-cbc, rijndael256-cbc,rijndael-cbc@lysator.liu.se'
Compression
- 圧縮を使用するかどうか。引数は 'yes' または 'no' のいづれ かである。
CompressionLevel
- 圧縮を有効にしている場合、使用する圧縮レベルを指定する。引 数は整数で 1(速い)から 9(遅い、最良)までの値を取る。デ フォルトのレベルは 6 で、これはほとんどのアプリケーション にとってちょうどよい値である。値の意味は gzip(1) と同じで ある。
ConnectionAttempts
- rsh 動作に切り替える/終了するまでに(1秒に一回ずつ)行う リトライ回数を指定する。引数は整数でなければならない。接続 に失敗することがある場合、スクリプト内で実行する際に便利で ある。
PubkeyAuthentication
- 公開鍵認証を試すかどうかを指定する。引数は 'yes' または 'no' のいずれか。このオプションはプロトコルバージョン2でのみ適用 されることに注意。
EscapeChar
- エスケープ文字(デフォルトは '~')を設定する。エスケープ文 字はコマンドラインで設定することもできる。引数は '^' の1 文字の次に何かの文字を続けるか、または一切のエスケープ文字 を無効にする(すなわちバイナリデータを通すために透過な接続 にする) 'none' である。
FallBackToRsh
- ssh が connection refused エラーで接続できない(リモート側 で listen している sshd(8) がいない)場合、(当該セッショ ンは暗号化されないという適切な警告の後)自動的に rsh(1) が 使われるようにするかどうかを指定する。引数は 'yes' か 'no' のいずれか。
ForwardAgent
- 認証エージェント(がもしあれば)への接続をリモートマシンへ 中継するかどうかを指定する。引数は 'yes' か 'no' のいずれか。 デフォルトは 'no'。
ForwardX11
- X11 コネクションを自動的に安全な通信路にリダイレクトし、 DISPLAY 環境変数をセットするかどうかを指定する。引数は 'yes' か 'no' のいずれか。デフォルトは 'no'。
GatewayPorts
- リモートホストをローカルに中継されたポートに接続させるかど うかを指定する。引数は 'yes' か 'no' のいずれか。デフォルト は 'no'。
GlobalKnownHostsFile
- /etc/ssh/ssh_known_hosts の代わりに使用するファイルを指定す る。
HostKeyAlias
- ホスト鍵を検索したり known_hosts ファイルに保存したりする 際、実際のホスト名の代わりに使用するべき別名を指定する。 ssh コネクションをトンネリングしたり、1ホスト上で複数の ssh サーバが動いている場合に、このオプションは役立つ。
HostName
- ログイン先の実際のホスト名を指定する。これはそのホストのニ ックネームや省略形を指定するのに使われる。デフォルトはコマ ンドラインで指定された名前が使われる。(コマンドラインと HostName 指定の双方で)数字の IP アドレスを指定してもよい。
IdentityFile
- ユーザの RSA 認証 ID が入っているファイルを指定する(デフォ ルトはユーザのホームディレクトリにある $HOME/.ssh/identity)。 さらに、認証時には認証エージェントによりあらゆる ID 指定が 使われる。ファイル名にはユーザのホームディレクトリを指すた めのチルダ('~')書式を使ってもよい。設定ファイル中で複数の ID ファイルを指定することも可能である。これらすべての ID フ ァイルが指定された順に使用される。
KeepAlive
- システムがキープアライブメッセージを相手側に送るべきかどう かを指定する。送られた場合、接続が無効になっていたり相手マ シンがクラッシュしていれば、それらの事象が適切に報告される。 しかしながら、これは裏を返せば、途中経路が一時的にダウンし てもそれで接続が切れてしまうということであり、うっとおしい と思うユーザもいるだろう。 デフォルトは 'yes'(キープアライブを送る)であり、ネットワ ークが落ちたりリモートホストが死んだりしたら、クライアント はそれを通知する。これはスクリプト中では重要であり、多くの ユーザもこの動作を望むはずである。 キープアライブを無効にするためには、サーバとクライアントの 設定ファイルの双方で 'no' にしてやらなければならない。
KerberosAuthentication
- ケルベロス認証を使うかどうかを指定する。引数は 'yes' また は 'no' のいずれか。
KerberosTgtPassing
- ケルベロス TGT をサーバ側に中継するかどうかを指定する。こ れはケルベロスサーバが本当に AFS kaserver である場合にのみ 動作する。引数は 'yes' または 'no' のいずれか。
LocalForward
- リモートマシンから与えられた host:port に対し、安全な通信 路を経由して中継したいローカルマシン上の TCP/IP ポートを指 定する。第一引数はポート番号で、第二引数は host:port を指 定する。複数の中継を指定することもでき、また追加の中継指定 はコマンドラインから行うこともできる。特権ポートを中継でき るのはスーパーユーザだけである。
LogLevel
- ssh からログメッセージを出力する際の冗長性のレベルを指定す る。指定可能な値は QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG である。デフォルトは INFO。
MAC
- MAC(message authentication code -- メッセージ認証コード) のアルゴリズムを、優先度の高い順に指定する。MAC アルゴリズ ムはプロトコルバージョン2でデータの統合的な保護のために使 用される。複数のアルゴリズムを指定する場合はカンマで区切る。 デフォルトは以下の通り: `hmac-sha1,hmac-md5,hmac-ripemd160,hmac-ripemd160@openssh.com, hmac-sha1-96,hmac-md5-96'
NumberOfPasswordPrompts
- パスワードプロンプトをリトライする回数を指定する。引数は 整数でなければならない。デフォルトは 3。
PasswordAuthentication
- パスワード認証を使用するかどうかを指定する。引数は 'yes' または 'no' のいずれか。このオプション亜hバージョン1と 2の両方に適用されることに注意。
Port
- リモートホストに接続する際のポート番号を指定する。デフォ ルトは 22。
Protocol
- ssh がサポートするべきプロトコルのバージョンを、優先順位 の高い順に指定する。指定可能な値は '1' または '2' である。 複数のバージョンを指定する場合はカンマで区切る。デフォル トは '1,2' である。これはつまり、ssh はまずバージョン1を 試し、いまくいかなければバージョン2を試してみることを意 味している。
ProxyCommand
- サーバへ接続するのに使うコマンドを指定する。コマンド文字列 は行末まで拡張され、/bin/sh により実行される。コマンド文字 列の中で、'%h' は接続先のホスト名に、'%p' はポート番号に置 き換えられる。コマンドは基本的に何でもよいいが、標準入力か ら入力を行い、標準出力に書き出すようにする。これはどこかの マシン上で動いている sshd(8) サーバに接続することもあるし、 どこかの sshd -i を実行することもある。ホスト鍵の管理は接続 先ホストの HostName (デフォルトはユーザがタイプした名前) を使って行われる。プロキシーコマンドによる接続では、 CheckHostIP は使えないことに注意。
RemoteForward
- ローカルマシンから与えられた host:port に対し、安全な通信 路を経由して中継したいリモートマシン上の TCP/IP ポートを指 定する。第一引数はポート番号で、第二引数は host:port を指 定する。複数の中継を指定することもでき、また追加の中継指定 はコマンドラインから行うこともできる。特権ポートを中継でき るのはスーパーユーザだけである。
RhostsAuthentication
- rhosts ベースの認証を試みるかどうかを指定する。この宣言は クライアント側にのみ影響を与えるもので、またセキュリティ に関してはおろそかになる。rhosts 認証を行っていない場合 rhosts 認証を無効にすると、低速回線上であれば認証にかかる 時間を低減できるかもしれない。安全ではなくなるため( RhostsRSAAuthentication を参照)、ほとんどのサーバでは RhostsAuthentication を許可していない。
RhostsRSAAuthentication
- RSA ホスト認証とともに rhosts ベースの認証を試行するかどう かを指定する。これはほとんどのホストにおいて通常の認証方法 となっている。引数は 'yes' か 'no' のいずれか。
RSAAuthentication
- RSA 認証を試行するかどうかを指定する。引数は 'yes' か 'no' のいずれか。RSA 認証は ID ファイルが存在するか認証エージェ ントが動作している時のみ試される。このオプションはプロトコ ルバージョン1にのみ適用されることに注意。
ChallengeResponseAuthentication
- チャレンジ - レスポンス方式の認証を使うかどうかを指定する。 現在は skey(1) 認証のみがサポートされている。引数は 'yes' か 'no' のいずれか。デフォルトは 'no'。
StrictHostKeyChecking
- このフラグが 'yes' にセットされている場合、ssh はホスト鍵 を $HOME/.ssh/known_hosts と $HOME/.ssh/known_hosts2 に自 動的に追加せず、ホスト鍵が変更されたホストについては接続を 拒否する。これにより、トロイの木馬アタックを最大限に防御し ている。しかしながら、/etc/ssh/ssh_known_hosts および /etc/ssh/ssh_known_hosts2 ファイルが適切にインストールされ ておらず、かつ頻繁に新しいホストに接続するような場合、この 動作はうっとおしく思われるかもしれない。このオプションを設 定すると、ユーザは新しいホストを手作業で追加しなければなら なくなる。このオプションを 'no' にしておくと、新しいホスト 鍵は自動的にユーザの既知のホストファイルに追加される。この フラグを 'ask' にすると、ユーザが問い合わせに対して本当に 登録する旨の確認を行った場合にのみホスト鍵を追加し、ホスト 鍵が変更になった場合は接続を拒否する。ホスト鍵の検査は、ど のケースにおいても自動的に行われる。引数は 'yes', 'no' ま たは 'ask' のいずれか。デフォルトは 'ask'。
UsePrivilegedPort
- こちらからの接続について特権ポートを使用するかどうかを指定 する。引数は 'yes' か 'no' のいずれか。デフォルトは 'yes'。 このオプションを 'no' にすると、古いサーバについては RhostsAuthentication と RhostsRSAAuthentication の両方とも 無効となるので注意。
User
- なんというユーザでログインするのかを指定する。これは、いく つもの異なったマシンに異なったユーザ名を持っている場合に重 宝する。これを設定しておけば、コマンドラインで与えるユーザ 名を覚えておく必要がなくなる。
UserKnownHostsFile
- $HOME/.ssh/known_hosts の代わりに使用するファイルを指定する。
UseRsh
- このホストについては rlogin/rsh を使用するべきであることを 指定する。ssh プロトコルを全くサポートさせないようにするこ ともできる。この場合 ssh はすぐに rsh(1) を起動する。このオ プションが指定されると、 HostName を除く)他のすべてのオプ ションは無視される。引数は 'yes' または 'no' である。
XAuthLocation
- xauth(1) プログラムの場所を指定する。デフォルトは /usr/bin/X11/xauth である。
環境変数
通常 ssh は以下の環境変数をセットする:
DISPLAY
- DISPLAY 環境変数は X11 サーバの位置を表している。これは ssh により自動的にセットされ、'hostname:n' の形式の値を持ってい る。ここで hostname はシェルが動いているホストを表し、n は 1 以上の整数である。ssh はこの特別な値を、安全な通信路をを 通して X11 コネクションを中継するために使用する。通常ユーザ は DISPLAY を明示的にセットするべきでない。これは、X11 コネ クションが安全でなくなるからである(さらに、ユーザは要求され た認証クッキーを手作業でコピーする羽目になる)。
HOME
- ユーザのホームディレクトリをセットする。
LOGNAME
- USER の別名。この変数を使うシステムとの互換性のためにセット する。
- ユーザのメールボックスを指し示す。
PATH
- ssh のコンパイル時に指定された、デフォルトの PATH をセット する。
SSH_AUTH_SOCK
- エージェントと通信を行うための unix ドメインソケットのパス を示す。
SSH_CLIENT
- そのコネクションのクライアント側終端を示す。この変数には 空白で区切られた3つの値がある。順にクライアントの IP ア ドレス、クライアント側のポート番号、サーバ側ポート番号で ある。
SSH_ORIGINAL_COMMAND
- 強制的にコマンドが実行された場合、この変数には元のコマン ドラインが保持される。これは元の引数を取り出すのに使われる。
SSH_TTY
- 現在のシェルまたはコマンドに関連づけられた tty (デバイス へのパス)の名前をセットする。現在のセッションに tty がな い場合、この変数はセットされない。
TZ
- デーモンが実行を開始したときにセットされていれば、このタイ ムゾーン変数は現在のタイムゾーンを示している(すなわち、デ ーモンは新しいコネクションに対してこの値を渡す)。
USER
- ログインしているユーザの名前をセットする。
これらに加え、ssh は $HOME/.ssh/environment を読み込み、 `VARNAME=value' の書式を持つ行の内容を環境変数に追加する。
ファイル
$HOME/.ssh/known_hosts
- ユーザがログインしたことのあるすべてのホスト(のうち、 /etc/ssh/ssh_known_hosts にない)のホスト鍵を記録する。 sshd(8) を参照。
$HOME/.ssh/identity, $HOME/.ssh/id_dsa
- ユーザの RSA または DSA 認証 ID を保持する。これらのファ イルは重要なデータを持っているので、ユーザからは読めても 他のユーザからはアクセス (read/write/execute) できないよ うにすべきである。ssh は他のユーザからアクセス可能な秘密 鍵ファイルを無視することに注意せよ。鍵を生成する際にパス フレーズを指定することもできる。パスフレーズは、このファ イルの重要な部分を 3DES を使って暗号化するのに使われる。
$HOME/.ssh/identity.pub, $HOME/.ssh/id_dsa.pub
- 認証のための公開鍵(すなわち ID ファイルの公開部分を、人間 が読める形式で)を保持する。$HOME/.ssh/identity.pub ファイ ルの中身を、自分が RSA 認証を使ってログインしたいと思うす べてのマシン上の $HOME/.ssh/authorized_keys に追加してやら なければならない。また $HOME/.ssh/id_dsa.pub を、自分が DSA 認証を使ってログインしたいと思うすべてのマシン上の $HOME/.ssh/authorized_keys2 に追加してやらなければならない。 これらのファイルは秘密ではなく、誰から読まれても構わない( その必要もないが)。これらのファイルは自動的に使われること はなく、必要でさえない。単にユーザの利便性のために提供され ているだけである。
$HOME/.ssh/config
- これはユーザ毎の設定ファイルである。このファイルの書式はす でに上記で述べた。このファイルは ssh クライアントによって 使われる。このファイルには通常いかなる重要なデータも入るこ とはないが、念のためユーザは read/write 可能とし、他のユー ザからのアクセスパーミッションはすべて落としておこう。
$HOME/.ssh/authorized_keys
- このユーザとしてログインするために使われる RSA 鍵の一覧を 保持する。このファイルの書式は sshd(8) マニュアルページで 記述されている。もっとも単純な書式では、.pub ID ファイル と同一である(すなわち、各行にはその係数におけるビットの 並び、公開されている指数値、係数、コメントフィールドが空 白で区切られて格納されている)。このファイルはそんなに機 密性は高くないが、念のためユーザは read/write 可能とし、 他のユーザのアクセスパーミッションはすべて落としておこう。
$HOME/.ssh/authorized_keys2
- このユーザとしてログインするために使われる公開鍵(DSA/RSA) の一覧を保持する。このファイルはそんなに機密性は高くないが、 念のためユーザは read/write 可能とし、他のユーザからのアク セスパーミッションはすべて落としておこう。
/etc/ssh/ssh_known_hosts, /etc/ssh_known_hosts2
システム全体で使用する既知のホスト鍵のリスト。 /etc/ssh/ssh_known_hosts には RSA 鍵が、 /etc/ssh/ssh_known_hosts2 にはプロトコルバージョン2の DSA または RSA 鍵が入っている。これらのファイルには、組織内の すべてのマシンの公開ホスト鍵が入るように、システム管理者に よって設定されていることが望ましい。このファイルは全ユーザ から読めなければならない。このファイルには、公開鍵が1行に 1つずつ、以下の書式で入っている(各フィールドはカンマで区 切られる):システム名、係数におけるビットの並び、公開され ている指数値、係数、オプションのコメントフィールド。同じマ シンに対して異なった名前が使われると、そのようなすべての名 前がカンマで区切ってすべて羅列されているはずである。この書 式は sshd(8) マニュアルページで説明されている。
ログインする際、クライアントホストを確認するために、sshd(8) により(ネームサーバから返される)正式なシステム名が使われる。 ssh はユーザが与えた名前を正式な名前に変換しないので、他の 名前も列挙しておく必要がある。これは、ネームサーバにアクセス できる誰かによって、ホスト認証のメカニズムを破壊されないよう にするためである。
/etc/ssh/ssh_config
- システム全体の設定ファイル。このファイルは、ユーザ毎の設定 ファイルで指定されていない値のデフォルトを決定したり、設定 ファイル自体を持たないユーザのためのものである。 このファイルは全ユーザからアクセスできなければならない。
$HOME/.rhosts
このファイルは .rhost 認証で使われるもので、ログインできる ホストとユーザのペアを列挙する。(このファイルは rlogin や rsh でも使われるため、このファイル自体も安全ではないことに 留意しておこう)。このファイルの各行はホスト名(ネームサー バから返される正式名称)に続いてそのホストのユーザ名が空白 で区切って列挙されている。ユーザのホームディレクトリが NFS でマウントされているようなホストでは、このファイルは全ユー ザからアクセス可能にしておかなければならない場合もある。こ れは。sshd(8) はこれを root 権限で読み込むからである。さら に、このファイルの所有者はそのユーザであり、それ以外のユー ザから書き込みが可能になっていてはならない。ほとんどのマシ ンにおいて、そのユーザからは読み書き可能、他のユーザからは アクセス不可にしておくことが推奨される。
ただしデフォルトでは sshd(8) がインストールされるので、 .rhosts 認証で許可するのに先立って RSA ホスト認証が正しく 行われる必要があることに注意しよう。もしあなたのサーバマシ ンの /etc/ssh/ssh_known_hosts にクライアントのホスト鍵が登 録されていなければ、それを $HOME/.ssh/known_hosts に登録し ておけばよい。これを行うためのもっとも簡単な方法は、そのサ ーバマシンからクライアントに対して逆方向に ssh で接続して やればよい。これで自動的にホスト鍵が $HOME/.ssh/known_hosts に追加される。
$HOME/.shosts
- このファイルは .rhosts と全く同じように使われる。このファ イルが必要となるのは、ssh で rhosts 認証を使用するが、 rlogin(1) と rsh(1) によるログインは許可したくない場合である。
/etc/hosts.equiv
- このファイルは .rhosts 認証の間で使用される。この中にはホ ストの正式名称が1行に1つずつ格納されている(完全なフォー マットについては sshd(8) マニュアルページに記述されている)。 このファイルの記述中にクライアントのホストがあれば、自動的 にログインが許可され、クライアントとサーバにおけるユーザ名 は同じものとみなされる。さらには、通常 RSA のホスト認証が 要求される。このファイルは root によってのみ書き込みができ るようになっているべきである。
/etc/ssh/shosts.equiv
- このファイルは /etc/hosts.equiv と全く同じように処理される。 このファイルは ssh によるログインを許可するが、rsh/rlogin を使わないという場合に意味がある。
/etc/sshrc
- このファイルに書かれているコマンドは、ユーザがログインして、 シェル(またはコマンド)の実行を開始する直前に実行される。 詳細は sshd(8) のマニュアルを参照のこと。
$HOME/.ssh/rc
- このファイルに書かれているコマンドは、ユーザがログインして、 シェル(またはコマンド)の実行を開始する直前に実行される。 詳細は sshd(8) のマニュアルを参照のこと。
$HOME/.ssh/environment
- 環境変数に対する追加定義を行う。前述の環境変数のセクション を参照。
libcrypto.so.X.1
- 正しい動作をするためには、RSA アルゴリズムをサポートするよ うなバージョンのライブラリが必要である。
作者
- OpenSSH は、Tatu Ylonen によってリリースされたオリジナルでフリーの ssh 1.2.12 の派生物である。Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo de Raadt, Dug Song が多くのバグを取り除き、再度 新しい機能を取り入れて OpenSSH を作成した。Markus Friedl は SSH プ ロトコルバージョン 1.5 および 2.0 のサポートについて貢献した。
翻訳者
- 堀田 倫英 <hotta@net-newbie.com>
関連事項
rlogin(1), rsh(1), scp(1), sftp(1), ssh-add(1), ssh-agent(1), ssh-keygen(1), telnet(1), sshd(8)BSD Experimental September 25, 1999 13