SSH(1)

名称
ssh - OpenSSH SSH クライアント (リモート ログイン プログラム)

書式
ssh [-l ログイン名] [ホスト名 | ユーザ@ホスト名] [コマンド]

ssh [-afgknqstvxACNPTX1246] [-c 暗号化オプション] [-e エスケープ文字] [-i identityファイル] [-l ログイン名] [-m MAC指定] [-o オプション] [-p ポート] [-L ポート: ホスト: ホスト側ポート] [-R ポート: ホスト: ホスト側ポート] [ホスト名 | ユーザ@ホスト名] [コマンド]

解説
ssh (SSH クライアント) はリモートマシンにログイン したり、リモートマシン上でコマンドを実行するためのプログラムです。 これは rlogin と rsh を置き換えるためのもので、安全でないネットワーク 上にある、2つの信頼されていないホスト間で、暗号化された安全な通信を 提供します。X11 の接続や任意の TCP/IP ポートなども安全な通信路を通して 転送できます。

ssh は指定された ホスト名 に接続し、ログインします。 ユーザはリモートマシンに対して、本人であることを証明する必要があります。 これにはプロトコルのバージョンに応じたいくつかの方法のうち一つを使います:

  SSH プロトコル バージョン 1

最初に、ユーザがリモートマシン上の /etc/hosts.equiv あるいは /etc/ssh/shosts.equiv に記されているマシンからログインしてきて、 さらにそのユーザの名前が両方のホストで同じならば、そのユーザは すぐさまログインが許可されます。 つぎに、 .rhosts あるいは .shosts がリモートホスト上のそのユーザのホームディレクトリに存在していて、そこに クライアントホスト名とそのホスト上におけるユーザ名が記されている 行が存在すれば、そのユーザはログインが許可されます。 この形の認証はふつう、これ単体ではサーバから許可されません。 安全ではないからです。

2番目の認証方法は rhosts または hosts.equiv を RSA ベースのホスト認証と組み合わせて使うことです。 これは、もしログインが $HOME/.rhosts, $HOME/.shosts, /etc/hosts.equiv, あるいは /etc/shosts.equiv で許可されていて、さらにサーバ側がクライアントのホスト鍵 ( FILES セクションの /etc/ssh/ssh_known_hosts と $HOME/.ssh/known_hosts の項を参照) を確認できる場合にのみ ログインが許可されます。この認証方法を使うと IP 詐称、 DNS 詐称 および 経路詐称 によるセキュリティーホールをふさぐことができます。 [管理者の方へ: /etc/hosts.equiv や $HOME/.rhosts 、 そして一般的な rlogin/rsh プロトコルは 本質的に危険であり、セキュリティを考えるなら禁止しなくてはいけません]

3つめの認証方法として、 ssh は RSA ベースの認証をサポートしています。 このやりかたは公開鍵暗号技術に基づいています: 暗号システムのなかには、 暗号化／復号化をそれぞれ別の鍵をつかって行うことができ、さらに復号化用の 鍵から暗号化用の鍵が推測することはできないものがあります。RSA はこのような 暗号システムのひとつで、以下のようなアイデアで認証を行います。 まず各ユーザは、認証のための「秘密鍵」「公開鍵」とよばれる鍵の対を つくります。サーバは公開鍵を知っていますが、秘密鍵のほうはユーザだけが 知っているものとします。 $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行ごとにひとつの鍵を格納します。 各行はかなり長くなることもあります)。 この後、ユーザはパスワードなしでログインすることができます。 RSA 認証は rhosts 認証よりもずっと安全です。

RSA 認証を使う際にいちばん便利なのは「認証エージェント」と呼ばれる ものを使うことでしょう。詳しくは ssh-agent(1) のマニュアルページをごらんください。

もし他の認証方法が失敗した場合、 ssh はユーザにパスワードを要求します。 このパスワードは検査のためリモートホストに送られますが、 すべての通信は暗号化されているため、ネットワークを盗聴している何物かに よってパスワードが見られてしまうようなことはありません。

  SSH プロトコル バージョン 2

ユーザがバージョン 2 のプロトコルで接続したときには、別の認証方法が 使えるようになります。まずクライアントは最初に公開鍵認証を 試そうとするでしょう。これは PreferredAuthentications のデフォルト値によります。この認証に失敗すると、次は パスワード認証を試み、これもだめなら最後にキーボードインタラクティブ認証を 試みます。

公開鍵による方法は前節に書かれている RSA 認証と似ており、 RSA または DSA アルゴリズムを使うことができます。 クライアントは自分の秘密鍵である $HOME/.ssh/id_dsa または $HOME/.ssh/id_rsa を使ってセッション識別子に署名し、この結果をサーバに送ります。 サーバはこれに対応する公開鍵が $HOME/.ssh/authorized_keys2 ファイル中に存在するかどうか検査し、 もし双方の鍵が存在して、なおかつその署名が正しければアクセスを 許可します。 セッション識別子は共有 Diffie-Hellman 値によって与えられます。 この値を知ることができるのはクライアントとサーバだけです。

公開鍵認証が失敗するか、あるいはそれが使えなかった場合、 リモートホストにはそのユーザであることを証明するパスワードを 送ることができます。

加えて、 ssh ではホスト間認証やチャレンジ・レスポンス認証もサポートしています。

さらにプロトコル 2 では、秘匿性 (通信は 3DES, Blowfish, CAST128 または Arcfour によって暗号化されます) やデータの改竄を防ぐ機構 (data integrity protection) (hmac-sha1, hmac-md5) が提供されています。 プロトコル 1 では通信内容が改竄されていないことを保証するような 強力なメカニズムは存在しないので注意してください。

  ログインセッション と リモート実行

そのユーザが本人であることが確認できると、 サーバは与えられたコマンドを実行するか、あるいはユーザを そのマシンにログインさせてリモートマシンでの標準的なシェルを 与えます。リモートコマンドあるいはシェルにおけるすべての通信は 自動的に暗号化されます。

仮想端末が割り当てられている場合 (通常のログインセッション時)、 ユーザは以下のエスケープ文字を使うことができます。

仮想端末が割り当てられていない場合、そのセッションは透過になります。 そのため、バイナリデータでも確実に転送できます。 ほとんどのシステムでは、たとえ仮想端末が割り当てられている場合でも エスケープ文字に “none” を設定することによって、そのセッションを透過にすることができます。

セッションは、リモートマシン上のコマンドやシェルが完了し、すべての X11 や TCP/IP 接続が閉じられると終了します。このときのリモート プログラムの終了状態が ssh の終了状態となります。

  エスケープ文字

仮想端末が割り当てられている場合、ssh ではエスケープ文字を使った 機能がいくつかサポートされています。

現在サポートされているエスケープ機能 (エスケープ文字はデフォルトの ‘~’ と仮定します) :

~.  接続を切る

~^Z sshをバックグラウンドに移行させる

~#  いま転送されている接続の一覧を表示する

~&  sshをバックグラウンドに移行させ、転送された接続あるいは X11 の セッションが終了するのを待ってログアウトする (プロトコル バージョン 1 のみ)

~?  エスケープ文字の一覧を表示する

~R  その接続の rekeying を要求する (SSH プロトコル バージョン 2 で、 なおかつ相手がこれをサポートしているときのみ有効)

チルダ記号そのものを 1回入力するには ~~ を押します (あるいは上で述べられている以外の文字をチルダに続けます)。 エスケープ文字は、つねに改行の直後に来なければ特別な文字とは 見なされません。エスケープ文字は、設定ファイルの EscapeChar 設定項目あるいはコマンドラインの -e オプションで変更できます。

  X11 と TCP の転送

ユーザが X11 を使っている (環境変数 DISPLAY が設定されている) 場合、X11 ディスプレイへの接続は リモート側に転送可能です。つまり、 シェル (あるいはコマンド) から起動された X11 プログラムはみな 暗号化された通信路を通り、本来の X サーバへの接続は ローカルマシン上からなされるようになります。 ユーザは DISPLAY X11 接続は ssh のセキュリティを弱めてしまいますので、 デフォルトで無効になっています。 を手動で設定すべきではありません。 X11 接続の転送はコマンドラインあるいは設定ファイルによって設定できます。

ssh によって設定された DISPLAY の値はサーバマシン上を指すようになっていますが、 ディスプレイ番号は 0 より大きい値になっているでしょう。 これは正常な状態です。 ssh は暗号化された通信路を介して接続を転送します。 そのため、サーバマシン上に X サーバの “プロキシー” をつくるのでこうなるのです。

また、 ssh はサーバマシン上で Xauthority 情報を自動的に用意します。 ssh はこのためにランダムな認証クッキーを生成し、サーバ側の Xauthority に格納し、接続が転送されるときはすべてこのクッキーを持たせる ようにします。そして接続が開かれるときに、これが本物のクッキーと置き換わる ようにするのです。本物の認証クッキーがサーバ側に送られることは 決してありません (し、暗号化されないままでクッキーが送られる こともありません)。

ユーザが認証エージェントを使っている場合、そのエージェントへの接続は それがコマンドラインあるいは設定ファイルで禁止されていない限り、 自動的にリモート側に転送されます。

安全な通信路をつかった任意の TCP/IP 接続への転送は、 コマンドラインあるいは設定ファイルで指定します。TCP/IP 転送の 応用として、ひとつは電子預金への安全な接続が考えられます。ほかにも ファイヤーウォールをまたいで接続するなどの使いみちがあるでしょう。

  サーバ認証

ssh はこれまでに使った鍵すべてが入っているデータベースを 自動的に保持し、検査します。これらのうち、RSA ホスト鍵はユーザの ホームディレクトリにある $HOME/.ssh/known_hosts に格納され、プロトコル バージョン 2 で使われるホスト鍵は $HOME/.ssh/known_hosts2 に格納されます。これらに加え、 /etc/ssh/ssh_known_hosts および /etc/ssh/ssh_known_hosts2 も既知のホストとして自動的に検査されます。 新しいホストは、ユーザ側のファイルに自動的に追加されていきます。 もしあるホストの鍵がこれまでと変わっていた場合、 ssh は警告を発してパスワード認証を禁止します。 これはトロイの木馬がユーザのパスワードを盗むのを防ぐためです。 この仕組みのもうひとつの目的は、どこか他の場所で man-in-the-middle 攻撃が行われ、暗号化がたくみにかわされてしまうのを防ぐことです。 StrictHostKeyChecking 設定項目 (下記参照) はホスト鍵が知られていなかったり、 それが変更されていた場合のログインを防ぐために使われます。

オプションは次のとおりです:

-a  認証エージェントの転送を禁止します。

-A  認証エージェントの転送を許可します。 これは設定ファイルによってホストごとに指定することも可能です。

-c blowfish|3des
    このセッションで使われる暗号化の方法を指定します。デフォルトでは 3des が使われます。これが安全であると考えられているためです。 3des (トリプル des) は 3つの異なる鍵をつかって 暗号化-復号化-暗号化を行うもので、 ssh ではもう完全にサポートの対象外となった des 暗号化よりも安全であると考えられています。 blowfish は高速なブロック暗号化アルゴリズムで、かなり安全であり、 3des よりもずっと高速です。

-c 暗号化オプション
    プロトコル バージョン 2 では、カンマで区切ったリストにより、 暗号化の方法を優先順位をつけて指定することができます。 暗号化についての詳しい情報は 暗号化 の項をご覧ください。

-e ch|^ch|none
    仮想端末を使うセッションにおけるエスケープ文字を指定します (デフォルトは ‘~’ )。エスケープ文字は行頭に来たときのみ認識されます。 エスケープ文字のあとにドット ( (‘’). ) がきた場合その接続は閉じられ、control-Z がきた場合には その接続はサスペンドされます。 このエスケープ文字自身が続いたときには、この文字が 1回だけ送られます。 エスケープ文字を “none” に指定するとあらゆるエスケープ機能が禁止され、 セッションは完全に透過になります。

-f  ssh がコマンドを実行する直前に、 バックグラウンドに移行するよう指示します。これは ssh にパスワードあるいはパスフレーズを入力する必要はあるものの、 そのコマンド自体はバックグラウンドで実行させたいときに有用です。 これは -n オプションも含んでいます。 リモートサイトで X11 プログラムを起動させる場合には、 ssh -f host xterm などとやるのがおすすめです。

-g  リモートホストが転送されたローカルなポートに接続することを許可します。

-i identityファイル
    RSA認証 あるいは DSA 認証のさいに identity (秘密鍵) を読むファイルを指定します。 デフォルトはユーザのホームディレクトリにある $HOME/.ssh/identity になっています。identity ファイルは設定ファイルによって、 ホストごとに指定することもできます。複数の It is possible to have multiple -i オプションを指定することも可能です。 (設定ファイルで複数の鍵を指定することもできます。)

-k  Kerberos チケットおよび AFS トークンの転送を禁止します。 これは設定ファイルによって、ホストごとに指定することもできます。

-l ログイン名
    リモートマシン上でログインするユーザ名を指定します。 これは設定ファイルによって、ホストごとに指定することもできます。

-m MAC指定
    プロトコル バージョン 2 では、カンマで区切ったリストにより、 使用する MAC (message authentication code, メッセージ認証コード) を 優先順位をつけて指定することができます。 MAC についての詳しい情報は MACs の項をご覧ください。

-n  標準入力を /dev/null からリダイレクトするように (つまり標準入力からの読み込みを禁止した状態に) します。 ssh をバックグラウンドで走らせるときには、このオプションが不可欠です。 よくある手としては、リモートマシン上で X11 のプログラムを 走らせるときにこれを使うことです。たとえば、 ssh -n shadows.cs.hut.fi emacs & で emacs を立ち上げると、X11 接続は暗号化された経路を 介して自動的に転送されます。 ssh プログラムはこの後バックグラウンドに移行するでしょう。 (これは ssh がパスワードあるいはパスフレーズを訊いてくるときには使えません。 -f オプションを参照してください。)

-N  リモートコマンドを実行しません。これはポート転送のみを 行いたい場合に有用です (プロトコル バージョン 2 のみ)。

-o オプション
    設定ファイルと同じ形式でオプションを与えたいときに使用します。 コマンドラインオプションでは指定できないオプションを指定したいときに 有用です。このときのオプションは設定ファイルの 1行と 同じ形式である必要があります。

-p ポート
    リモートホストに接続するポート番号あるいはポート名を指定します。 これは設定ファイルによって、ホストごとに指定することもできます。

-P  外に向けての接続を、特権ポートでないポートから張るようにします。 これはファイヤーウォールが特権ポートからの接続を禁じているときに 使われます。このオプションを指定すると、古いサーバでは RhostsAuthentication および RhostsRSAAuthentication 設定項目がオフになることに注意してください。

-q  静かなモード。すべての警告メッセージや診断メッセージは 抑制されます。致命的なエラーだけが表示されます。

-s  リモート側でサブシステムの実行を要求するときに使われます。 サブシステムは SSH2 プロトコルで実現された機能であり、 これを使うと SSH を他のアプリケーション (sftp など) への安全な 通信路として利用することができます。この場合、 サブシステム名はリモートコマンドとして指定します。

-t  強制的に仮想端末を割り当てます。これはリモートマシン上で 任意の画面ベースのプログラムを実行するとき (たとえば、メニューサービスを実装するときなど) に非常に有用です。 複数の -t をつけると、たとえ ssh がローカル側での端末を持っていない場合でも 強制的に仮想端末を割り当てます。

-T  仮想端末の割り当てを禁止します。

-v  冗長表示モード。 ssh が進行中のデバッグメッセージを表示するようにします。 これは接続や認証、設定の問題をデバッグするときに助けとなります。 複数の -v オプションをつけると出力が増えます。最大は 3個です。

-x  X11 の転送を禁止します。

-X  X11 の転送を許可します。 これは設定ファイルによって、ホストごとに指定することもできます。

-C  すべてのデータを圧縮するよう指示します (標準入力、標準出力、 標準エラー出力、転送された X11 や TCP/IP 接続を含む)。圧縮に 使われるアルゴリズムは gzip(1) と同じもので、 “レベル” は CompressionLevel 設定項目 (下記参照) によって制御できます。 圧縮は、モデムその他の遅い接続においては必要ですが、高速な ネットワークでは速度が低下するだけです。このデフォルト値は ホスト間ごとに設定ファイルに書くことができます。下の Compress 設定項目を参照してください。

-L ポート:ホスト:ホスト側ポート
    与えられたローカル (クライアント) ホスト上のポートが、 与えられたリモートホスト上のポートに転送されるようにします (ローカル→リモートのポート転送)。 これはローカル側で port に listen (接続受け付け) 用の ソケットを割り当てることにより行われます。 このポートに向けて行われた接続はつねに 安全な通信路を経由してリモートマシン上に到達し、そこから host のポート hostport に接続されるようになります。 ポート転送は設定ファイルによっても指定できます。特権ポートを 転送できるのは root だけです。IPv6 アドレスの場合は、指定する 形式が異なります: port/host/hostport

-R ポート:ホスト:ホスト側ポート
    与えられたリモート (サーバ) ホスト上のポートが、 与えられたローカルホスト上のポートに転送されるようにします (リモート→ローカルのポート転送)。 これはリモート側で port に listen (接続受け付け) 用の ソケットを割り当てることにより行われます。 このポートに向けて行われた接続はつねに 安全な通信路を経由してローカルマシン上に到達し、ここから host のポート hostport に接続されるようになります。 ポート転送は設定ファイルによっても指定できます。特権ポートを 転送できるのは、リモートマシン上に root としてログインしているときだけです。 IPv6 アドレスの場合は、指定する形式が異なります: port/host/hostport

-1  ssh がプロトコル バージョン 1 のみを使うよう強制します。

-2  ssh がプロトコル バージョン 2 のみを使うよう強制します。

-4  ssh が IPv4 アドレスのみを使うよう強制します。

-6  ssh が IPv6 アドレスのみを使うよう強制します。

設定ファイル
ssh はこの順序で設定情報を取得します: コマンドラインオプション、 ユーザの設定ファイル ($HOME/.ssh/config) 、そしてシステム全体での設定ファイル (/etc/ssh/ssh_config) 。各設定項目にはそれそれ最初に見つかったものが使われます。 設定ファイルはいくつかのセクションに分かれており、これらは “Host” キーワードにより区切られています。あるセクションの設定が 適用されるのは、コマンドラインから与えられたホスト名が、 このキーワードで指定されているパターンのどれかにマッチするときだけです。

各設定項目で最初に見つかった値が使われるので、ホストに特化した 宣言をファイルの先頭近くに置くようにし、一般的なものを後に置くのが よいでしょう。

設定ファイルは以下のような形式になっています:

空行、および ‘#’ で始まる行は、コメントとみなされます。

それ以外の場合、この行は “キーワード 引数”. という形式になっています。 とりうるキーワードとその意味は以下のとおりです (設定ファイルは大文字小文字を区別することに注意してください) :

Host (ホスト)
    これ以後の (次の Host キーワードが現れるまでの) 設定項目を、ここで 指定されたパターンのどれかにマッチするホストだけに 制限します。パターン中では ‘*’ と ‘’? がワイルドカードとして使えます。単独の ‘*’ は、すべてのホストに対するデフォルトとして使えます。 ここでいうホストとは、コマンドライン引数で与えられた ホスト名 そのもののことです (つまり、ホスト名はマッチングの前に正規化されたりしません)。

AFSTokenPassing (AFS トークンパス)
    リモートホストに AFS トークンを渡すかどうかを指定します。 このキーワードがとりうる引数の値は “yes” あるいは “no” のどちらかになります。 このオプションはプロトコル バージョン 1 でのみ有効です。

BatchMode
    これが “yes” に設定されていると、パスフレーズおよびパスワードの 入力を求めないようになります。このオプションはスクリプトなどにおける バッチ処理中で、パスワードを打ち込むユーザがいない場合に有用です。 引数の値は “yes” あるいは “no” です。 デフォルトは “no (パスワードあるいはパスフレーズの入力を求める)” です。

CheckHostIP (ホスト IP の検査)
    このオプションが “yes” に設定されていると、ssh は接続先ホスト名の IP アドレスが known_hosts に書かれている同一ホスト名 IP アドレスと同じかどうか 検査するようになります。 これによって、DNS 詐称によりホスト鍵が変えられたことを 検出できます。このオプションが “no” に設定されている場合は、この検査は行われません。 デフォルトでは、これは “yes (ホスト IP アドレスの検査を行う)” になっています。

Cipher (暗号化アルゴリズム)
    プロトコル バージョン 1 のセッションで使う暗号化の アルゴリズムを指定します。現在のところ Currently, “blowfish” および “3des” がサポートされており、デフォルトは “3des” です。

Ciphers (複数の暗号化アルゴリズム)
    プロトコル バージョン 2 で使う暗号化アルゴリズムの 優先順位を指定します。複数の暗号化アルゴリズムを カンマで区切って指定します。 デフォルトは

          ``aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,
            aes192-cbc,aes256-cbc''

    の順になっています。

Compression (圧縮)
    データ圧縮を行うかどうかを指定します。 引数の値は “yes” あるいは “no” です。 デフォルトでは “no (圧縮を行わない)” になっています。

CompressionLevel (圧縮レベル)
    圧縮をおこなうさいの圧縮レベルを指定します。 この引数がとる値は 整数の 1 (速い) から 9 (遅い、高圧縮率) までです。 デフォルトの値は 6 で、ほとんどのアプリケーションにはこれで充分です。 この値の意味は gzip(1) と同じです。 このオプションはプロトコル バージョン 1 のみに適用されることに 注意してください。

ConnectionAttempts (接続試行回数)
    接続を試みる回数 (1秒に一回) を指定します。これを越えると ssh は rsh に移行するか、終了してしまいます。この値は整数で なければなりません。これは、ときどき接続に失敗する環境での スクリプトなどに有用です。 デフォルトは 4回です。

EscapeChar (エスケープ文字)
    エスケープ文字を設定します (デフォルトは ‘~’ )。エスケープ文字はコマンドラインからも指定できます。 この引数には 1つの文字か、 ‘^’ に1文字を付けたもの、あるいはエスケープ文字の使用をすべて禁止するなら “none” を指定します (これはその接続を、バイナリ データに対して透過にすることになります)。

FallBackToRsh (rsh への退行)
    ssh 経由の接続が (リモートホスト上で sshd(8) が listen していないなどの理由で) 拒否されたとき (connection refused)、 かわりにこのセッションは暗号化されないという適切な警告を出して、 rsh(1) を自動的に使うかどうかを指定します。 この引数の値は “yes” または “no” で、デフォルトは “no (rsh を使わない)” です。

ForwardAgent (エージェント転送)
    認証エージェントへの接続を、(それが存在する時は) リモートマシン上に 転送するかどうかを指定します。この引数の値は “yes” あるいは “no” でなければならず、デフォルトは “no (エージェント転送を行わない)” です。

ForwardX11 (X11 転送)
    X11 接続を自動的に安全な通信路へリダイレクトし、 DISPLAY を設定するかどうかを指定します。この引数の値は “yes” あるいは “no” でなければならず、デフォルトは “no (X11 接続を転送しない)” です。

GatewayPorts (ポート転送の中継)
    ローカルからリモートへ転送されている (リモート→ローカルのポート転送) ポートに、他ホストからの接続を許すかどうかを指定します。 この引数の値は “yes” または “no” で、デフォルトは “no (転送されているポートに他ホストからの接続を許可しない)” に設定されています。

GlobalKnownHostsFile (大域的 known_host ファイル)
    プロトコル バージョン 1 で、 /etc/ssh/ssh_known_hosts のかわりに使用するホスト鍵データベースファイルを指定します。

GlobalKnownHostsFile2 (大域的 known_host2 ファイル)
    プロトコル バージョン 2 で、 /etc/ssh/ssh_known_hosts2 のかわりに使用するホスト鍵データベースファイルを指定します。

HostbasedAuthentication (ホストベース認証)
    ホスト間認証を使った rhosts ベースの認証をおこなうかどうかを指定します。 とりうる引数の値は “yes” または “no” で、デフォルトは “yes (ホストベース認証を試みる)” になっています。 このオプションはプロトコル バージョン 2 のみに適用され、 RhostsRSAAuthentication と似ています。

HostKeyAlgorithms (ホスト間認証のアルゴリズム)
    プロトコル バージョン 2 において、ホスト間認証で使われる アルゴリズムを指定します。クライアントはここで指定された 優先順位のアルゴリズムを使って認証を試みます。 このオプションのデフォルトは “ssh-rsa,ssh-dss” です。

HostKeyAlias (ホスト鍵のエイリアス)
    ホスト鍵データベースからホスト鍵を検索するとき、あるいは データベースにホスト鍵を保存するときに、実際のホスト名のかわりに 使われる名前を指定します。 このオプションは ssh 接続をトンネリングしているときや、 単一のホスト上で複数の sshd サーバを動かしているときなどに 有用です。

HostName (実際のホスト名)
    実際にログインするホスト名を指定します。デフォルトでは ssh はコマンドラインで与えられたホスト名に接続しますが、 これを使うと、ホストのニックネームや省略形を使用することができます。 数字の IP アドレスでもかまいません (コマンドライン、 HostName キーワードの両方とも)。

IdentityFile (identity ファイル)
    ユーザの RSA または DSA 認証用 identity (秘密鍵) を 読むファイルを指定します (デフォルトはユーザのホームディレクトリにある $HOME/.ssh/identity ファイルが使われます)。 これに加えて、認証エージェントによって現れる identity も使われます。 ユーザのホームディレクトリを表すのにチルダ表記を使うこともできます。 設定ファイルでは複数の identity を指定することもでき、 この場合すべての identity が順に試されます。

KeepAlive (接続を生かしておく)
    システムが相手のマシンに keepalive メッセージを送るかどうかを 指定します。これが送られると、接続の異常終了や相手マシンの クラッシュが正しく通知されるようになります。 しかしこれを使うと、たとえ経路が一時的にダウンしていても 接続が死んでいるということになってしまい、これが邪魔になる場合もあります。

    デフォルトは “yes (keepalive を送る)” です。そのため クライアントはネットワークがダウンするか、 リモートホストが落ちると通知してきます。 これはスクリプト中では重要であり、多くのユーザもこれを望んでいます。

    Keepalive を禁止するには、 クライアントとサーバ両方の側の設定ファイルでこの値を “no” にする必要があります。

KerberosAuthentication (Kerberos 認証)
    Kerberos 認証をおこなうかどうか指定します。この引数の値は “yes” あるいは “no” です。

KerberosTgtPassing (Kerberos TGT パス)
    Kerberos TGT がサーバを転送するかどうかを指定します。これは その Kerberos サーバが実際に AFS kaserver であるときのみ 機能します。この引数の値は “yes” あるいは “no” です。

LocalForward (ローカル→リモート転送)
    ローカルマシンの TCP/IP ポートを、安全な通信路を経由して リモートマシン上から与えられた host:port に転送するよう指示します (訳注: -L オプションと同じ)。 最初の引数は転送するローカルホストのポートを、2番目の引数には転送先を host:port の形で指定します。ポート転送は複数指定することができ、 コマンドラインから追加指定することもできます。 特権ポートを転送できるのはスーパーユーザだけです。

LogLevel (ログレベル)
    ssh が出力するログの冗長性のレベルを指定します。 とりうる値は次のとおりです: QUIET、 FATAL、 ERROR、 INFO、 VERBOSE および DEBUG。 デフォルトでは INFO になっています。

MACs (メッセージ認証コード)
    使用する MAC (メッセージ認証コード) の優先順位を指定します。 MAC アルゴリズムはプロトコル バージョン 2 で使われる、 データの改竄を防ぐ機構 (data integrity protection) です。 複数のアルゴリズムをカンマで区切って指定します。 デフォルトは

          ``hmac-md5,hmac-sha1,hmac-ripemd160,hmac-ripemd160@openssh.com,
            hmac-sha1-96,hmac-md5-96''

    の順になっています。

NumberOfPasswordPrompts (パスワード試行回数)
    パスワードを最高何回まで訊くかを指定します。 この回数を超えると認証は失敗します。 このキーワードには整数を指定する必要があります。 デフォルト値は 3 です。

PasswordAuthentication (パスワード認証)
    パスワード認証をおこなうかどうかを指定します。この引数の値は “yes” または “no” です。デフォルトでは “yes (パスワード認証をおこなう)” になっています。

Port (ポート)
    リモートホストに接続するときのポート番号あるいはポート名を指定します。 デフォルトは 22 です。

PreferredAuthentications (認証の優先順位)
    プロトコル 2 で試される認証の優先順位を指定します。 これによって、クライアントは特定の認証 ( keyboard-interactive など) をそれ以外の認証 ( password など) よりも優先して選ぶことができます。 このオプションのデフォルトは “publickey, password, keyboard-interactive” の順になっています。

Protocol (プロトコル)
    ssh がサポートすべきプロトコルのバージョンの優先順位を指定します。 とりうる値は “1” と “2” です。 複数のバージョンを 指定するときはカンマで区切ってください。 デフォルト値は “2,1” です。これは ssh がまず始めにバージョン 2 がサポートされているかどうかを調べ、 サーバがそれをサポートしていなかった場合に バージョン 1 を使用することを指示しています (訳注: もしサーバ側がバージョン 2 の認証をサポートしていた場合、 バージョン 2 での認証に失敗すると ssh は そこで終了します。バージョン 1 の認証は *行わない* ため、 注意してください)

ProxyCommand (プロキシ コマンド)
    サーバに接続するのに使用するコマンドを指定します。 コマンド文字列はこのキーワード以後、行末まで書くことができます。 コマンド文字列は /bin/sh によって実行されます。 コマンド文字列では、 ‘%h’ は接続するホスト名に置換され、 ‘%p’ はポート番号あるいはポート名に置換されます。 コマンドは基本的に何でもよいのですが、標準入力から読み込み、 標準出力に書き込むようなものである必要があります。 これは最終的にサーバマシン上で動いている sshd(8) に接続するか、どこか別の場所で sshd -i を起動させるようにします。 ホスト鍵の管理は接続されているホストの HostName を使って行われます (デフォルトでは、これはユーザが タイプした名前になります)。プロキシ コマンドを使うと、 CheckHostIP (ホスト IP アドレスの検査) は使用できませんので注意してください。

PubkeyAuthentication (公開鍵認証)
    公開鍵認証をおこなうかどうかを指定します。 このキーワードの引数は “yes” か “no” のどちらかです。 デフォルトでは “yes (公開鍵認証をおこなう)” になっています。 このオプションはプロトコル バージョン 2 のみに適用されます。

RemoteForward (リモート→ローカル転送)
    リモートマシン上の TCP/IP ポートを、安全な通信路を経由して ローカルマシン上から与えられた host:post に転送するよう指示します (訳注: -R オプションと同じ)。 最初の引数は転送するリモートホストのポートを、 2番目の引数には転送先を host:port の形で指定します。 ポート転送は複数指定することができ、 コマンドラインから追加指定することもできます。 特権ポートを転送できるのはスーパーユーザだけです。

RhostsAuthentication (rhosts 認証)
    Rhosts ベースの認証をおこなうかどうかを指定します。この宣言は クライアント側にのみ影響し、セキュリティ的にまったくなんの 効果もないことに注意してください。 rhosts 認証を禁止しておくと、 rhosts 認証が使われないときに、遅い接続での認証にかかる時間が 短縮されることもあります。 ほとんどのサーバでは RhostsAuthentication は 安全でないという理由で許可されていません ( RhostsRSAAuthentication を参照のこと)。 この引数の値は “yes” または “no” です。 デフォルトでは “yes (rhosts 認証をおこなう)” になっています。 このオプションはプロトコル バージョン 1 のみに適用されます。

RhostsRSAAuthentication (rhosts-RSA 認証)
    RSA ホスト認証を使った Rhosts ベースの認証を試みるかどうかを 指定します。 この引数の値は “yes” または “no” です。 デフォルトの値は “yes (rhosts-RSA 認証をおこなう)” です。 このオプションはプロトコル バージョン 1 のみに適用されます。

RSAAuthentication (RSA 認証)
    RSA 認証を使うかどうかを指定します。 この引数の値は “yes” または “no” です。RSA 認証は identity ファイルが存在するときか、 認証エージェントが動いているときのみ使用されます。 デフォルトは “yes (RSA 認証をおこなう)” です。 このオプションは プロトコル バージョン 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” に設定されている場合、 ssh は新しいホスト鍵をユーザの known_hosts ファイルに 自動的に追加します。 このオプションが “ask” に設定されていると、 新しいホスト鍵が追加されるのは、ユーザが 本当にそれを望んでいると確認できたときだけになります。 ホスト鍵が変更されているホストへの接続は拒否されます。 known_hosts ファイルに含まれているホスト鍵は いかなる場合でも自動的に検査されます。 このオプションがとりうる値は “yes” 、 “no” あるいは “ask” で、デフォルトは “ask” です。

UsePrivilegedPort (特権ポートを使用する)
    外に向けての接続をおこなうときに、 特権ポートを使用するかどうかを指定します。この引数の値は “yes” または “no” で、デフォルトは “no” になっています。 注意: RhostsAuthentication あるいは RhostsRSAAuthentication を旧いサーバに対して行いたいときは、 このオプションを “yes” にする必要があります。

User (ユーザ)
    ログインするユーザ名を指定します。これは異なるマシン上で 異なるユーザ名を持っているような場合に有用です。 これでコマンドラインからわざわざユーザ名を与えなくてもすみます。

UserKnownHostsFile (個人用 known_hosts ファイル)
    プロトコル バージョン 1 で、 ホスト鍵データベースとして $HOME/.ssh/known_hosts 以外のファイルを使うときに指定します。

UserKnownHostsFile2 (個人用 known_hosts2 ファイル)
    プロトコル バージョン 2 で、 ホスト鍵データベースとして $HOME/.ssh/known_hosts2 以外のファイルを使うときに指定します。

UseRsh (rsh の使用)
    このホストに対して rlogin/rsh を使うべきかどうか指定します。 相手のホストが ssh プロトコルをまったくサポートしていないということもありえます。 このようなとき、 ssh がすぐに rsh(1) を実行するようになります。 このオプションが指定されていると、 これ以外のすべてのオプション ( HostName を除く) は無視されます。とりうる値は “yes” あるいは “no” です。

XAuthLocation (xauth の位置)
    xauth(1) プログラムの場所を指定します。デフォルトは /usr/X11R6/bin/xauth です。

環境変数
ssh はふつう以下の環境変数を設定します:

DISPLAY
    環境変数 DISPLAY は X11 サーバの場所を示しています。これは ssh によって、 “hostname:n” という形の値が自動的に設定されます。 ここで hostname の部分はシェルが走っているホストを表しており、 n は n 1 の整数です。 ssh はX11 接続を安全な通信路で転送するために、この特別な値を使います。 X11 の接続が安全でなくなってしまうため、ユーザは環境変数 DISPLAY を自分で設定すべきではありません (また、それをやってしまうとユーザは認証に必要なクッキーを手で コピーしなければならなくなります)。

HOME
    ユーザのホームディレクトリのパス名が設定されます。

LOGNAME
    環境変数 USER と同じです。 これは、この変数を使うシステムで互換性を保つために設定されます。

MAIL
    ユーザのメールボックスを指しています。

PATH
    デフォルトの PATH です。これは ssh のコンパイル時に指定されます。

SSH_AUTH_SOCK
    認証エージェントと通信するのに使われる Unix ドメインソケットの パスを表しています。

SSH_CLIENT
    接続の末端にあるクライアントの識別子です。この変数にはスペースで 区切られた 3つの値が入っています: クライアントの IP アドレス、 クライアントのポート番号、および サーバのポート番号です。

SSH_ORIGINAL_COMMAND
    強制コマンドが実行されると、この変数には、 元々指定されていたコマンドラインの値が入ります。 ここから本来の引数を取り出すことができます。

SSH_TTY
    現在のシェルあるいはコマンドに割り当てられている tty の名前 (端末装置へのパス) に設定されます。現在のセッションが端末を 持たない場合、この変数は設定されません。

TZ  デーモンが起動したとき、現在の時間帯を表すタイムゾーン変数が 設定されていると、それがここに入ります (つまりデーモンは その値を新規の接続に渡します)。

USER
    ログインしているユーザ名に設定されます。

これらに加えて、 ssh は $HOME/.ssh/environment ファイルを読み込み、 “VARNAME=value” という形式の行を環境変数に追加します。

関連ファイル

$HOME/.ssh/known_hosts, $HOME/.ssh/known_hosts2
    ユーザがログインしたことのあるホストすべてのホスト鍵を保持します (プロトコル バージョン 1 の /etc/ssh/ssh_known_hosts 、あるいはプロトコル バージョン 2 の /etc/ssh/ssh_known_hosts2 にあるものを除く)。 sshd(8) も見てください。

$HOME/.ssh/identity, $HOME/.ssh/id_dsa, $HOME/.ssh/id_rsa
    認証のための identity (秘密鍵および公開鍵) が格納されています。 それぞれ、プロトコル 1 の RSA 認証用、プロトコル 2 の DSA 認証用、 プロトコル 2 の RSA 認証用です。 これらのファイルには他人に見られてはいけないデータが入っているため、 そのユーザには読めても、他人からはアクセスできないようにしてください (読み込み/書き込み/実行属性ともに)。 Note that ssh は、他人にアクセスできるようになっている identity ファイルは無視するので注意してください。 鍵を作成するときにパスフレーズを指定することも可能です。この パスフレーズはファイル中の見られるべきでない部分を、 3DES を使って暗号化するのに用いられます。

$HOME/.ssh/identity.pub, $HOME/.ssh/id_dsa.pub, $HOME/.ssh/id_rsa.pub
    認証のための公開鍵です (ここには identity ファイルの 公開できる部分が可読形式で格納されています)。 $HOME/.ssh/identity.pub ファイルの内容は、プロトコル バージョン 1 の RSA 認証を 使ってログインしたいすべてのマシン上の $HOME/.ssh/authorized_keys ファイルに含まれている必要があります。また、 $HOME/.ssh/id_dsa.pub および $HOME/.ssh/id_rsa.pub ファイルの内容も同様に、 プロトコル バージョン 2 の RSA/DSA 認証を 使ってログインしたいすべてのマシン上の $HOME/.ssh/authorized_keys2 ファイルに含まれている必要があります。 これらのファイルは見られてもよいため、他人が読めるように しておいてもかまいません (が、別にそうする必要はあります)。 これらのファイルが自動的に使われることは決してありません。 また、必要でもありません。これらはただ単に ユーザの便宜をはかるために提供されています。

$HOME/.ssh/config
    ユーザごとの個人用設定ファイルです。 ファイル形式は上で説明されています。 このファイルは ssh クライアントによって使われます。 このファイルはふつう特に秘密の情報は含んでいませんが、 しかし望ましいパーミッションとしては、そのユーザからは 読み/書き可能で、他人からはアクセス不可能にしておくのがよいでしょう。

$HOME/.ssh/authorized_keys
    このユーザのログインに使われる RSA 公開鍵の一覧です。この形式は sshd(8) のマニュアルで説明されています。 このファイルのいちばん簡単な形式は .pub 公開鍵ファイルと同じものです (つまり各行に、係数のビット数、公開されている指数、係数および コメントフィールドがスペースで区切られて格納されます)。 これは特に見られてまずいというものではないのですが、 できればこのユーザからは読み/書きが可能で、 他人からはアクセス不可能なパーミッションに設定しておくのがよいでしょう。

$HOME/.ssh/authorized_keys2
    このユーザのログインに使われる公開鍵 (RSA または DSA) の一覧です。 これは特に見られてまずいというものではないのですが、 できればこのユーザからは読み/書きが可能で、 他人からはアクセス不可能なパーミッションに設定しておくのがよいでしょう。

/etc/ssh/ssh_known_hosts, /etc/ssh/ssh_known_hosts2
    システム全体の known_hosts ファイルです。 /etc/ssh/ssh_known_hosts は RSA 鍵を格納し、 /etc/ssh/ssh_known_hosts2 はプロトコル バージョン 2 における RSA あるいは DSA 鍵を格納します。 これらのファイルはシステム管理者によって用意され、その組織内で 使われるすべてのマシン用の公開ホスト鍵を格納するようになっているはずです。 このファイルは誰でも読めるようになっていなければいけません。 このファイルは 1行ごとに次のような形式で公開鍵を格納しています (各フィールドはスペースで区切られます): システム名、係数のビット数、公開されている指数、係数、および オプションとしてコメント用フィールド。同一のマシンにいくつかの 異なる名前が使われている場合は、それらはすべてカンマで区切って 列挙する必要があります。この形式は sshd(8) マニュアルページで説明されています。

    sshd(8) がログイン時にクライアント側のホストを検証するさいには、 システムの別名 (ネームサーバの返す canonical name) が 使われます。これ以外の名前が必要なのは次のような理由によります。 ssh は、鍵を検査する前にユーザの指定した名前を (DNS 的に) 正式なものに 変換する、ということをしません。なぜなら もし何物かがネームサーバに仕掛けを入れれば、 これを使ってホスト認証をだますことが可能になってしまうからです。

/etc/ssh_config
    システム全体にわたる設定ファイルです。このファイルはユーザの設定 ファイルでは指定されなかった値を提供し、また設定ファイルを 持たないユーザのためのデフォルトにもなります。このファイルは 誰にでも読み込み可能でなければいけません。

$HOME/.rhosts
    このファイルは .rhosts 認証で使われる、ログインを許可されたホスト名と ユーザの対の一覧です。(このファイルは 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 とまったく同じように扱われます。このファイルは、 rlogin(1) や rsh(1) ではログインできないようにしつつ、 ssh で rhosts 認証を使えるようにするためにあります。

/etc/hosts.equiv
    このファイルは .rhosts 認証 で使われます。ここには正式なホスト名が各行に記載されています (この形式の完全な説明は sshd(8) マニュアルページにあります)。このファイルに クライアントホストが載っていると、クライアント側とサーバ側の ユーザ名が同じ場合にログインは自動的に許可されます。普通は RSA ホスト認証が成功してからでなくてはいけません。このファイルは root のみが書き込めるようにしておくべきです。

/etc/ssh/shosts.equiv
    このファイルは /etc/hosts.equiv とまったく同じように扱われます。このファイルは ssh を使うが、rsh/rlogin は使わないユーザのログインを許可するのに有用です。

/etc/ssh/sshrc
    このファイルのコマンドは、ユーザがログインしてシェル (あるいはコマンド) が開始する直前に ssh によって実行されます。より詳しい情報については sshd(8) マニュアルページを見てください。

$HOME/.ssh/rc
    このファイルのコマンドは、ユーザがログインしてシェル (あるいはコマンド) が開始する直前に ssh によって実行されます。より詳しい情報については sshd(8) マニュアルページを見てください。

$HOME/.ssh/environment
    環境変数の追加定義を格納します。上の 環境変数 の節を見てください。

作者
OpenSSH は Tatu Ylonen による、フリーな オリジナル版 ssh 1.2.12 リリースから派生したものです。 Aaron Campbell、 Bob Beck、 Markus Friedl、 Niels Provos、 Theo de Raadt および Dug Song が多くのバグをとり除き、 新しい機能をふたたび追加して OpenSSH をつくりました。 SSH プロトコル バージョン 1.5 および 2.0 のサポートは Markus Friedl の貢献によるものです。

日本語訳
新山 祐介 (euske@cl.cs.titech.ac.jp) 2001/8/11

当マニュアルページは氏のご好意により FreeBSD 日本語マニュアルに収録させていただいています。 翻訳についてのご意見、ご指摘がありましたら新山氏 <euske@cl.cs.titech.ac.jp>、および FreeBSD jpman プロジェクト <man-jp@jp.FreeBSD.org> までお送りください。

関連項目
rlogin(1), rsh(1), scp(1), sftp(1), ssh-add(1), ssh-agent(1), ssh-keygen(1), telnet(1), sshd(8) T. Ylonen, T. Kivinen, M. Saarinen, T. Rinne, S. Lehtinen, SSH Protocol Architecture, draft-ietf-secsh-architecture-07.txt, January 2001, work in progress material.