OpenSSH-5.1p1 日本語マニュアルページ (2008/10/03)
OpenSSH SSH クライアント (リモート ログイン プログラム)
ssh
[-1246AaCfgKkMNnqsTtVvXxY
]
[-b
bindするアドレス ]
[-c
暗号方式 ]
[-D
[bindするアドレス :] ポート ] [-e
エスケープ文字 ]
[-F
設定ファイル ]
[-i
identityファイル ]
[-L
[bindするアドレス :] ポート :ホスト:ホスト側ポート] [-l
ログイン名 ]
[-m
MAC指定 ]
[-O
制御コマンド ]
[-o
オプション ]
[-p
ポート ]
[-R
[bindするアドレス :] ポート :ホスト:ホスト側ポート] [-S
制御用パス名 ]
[-w
ローカルtun [:リモートtun ] ]
[ユーザ @] ホスト名 [コマンド ]
ssh
(SSH クライアント) はリモートマシンにログインしたり、リモートマシン上でコマンドを実行するためのプログラムです。これは rlogin と rsh を置き換えるためのもので、安全でないネットワーク上にある2 つの信頼されていないホスト間で、暗号化された安全な通信を提供します。X11 接続や任意の TCP ポートなども安全な通信路を通して転送できます。
ssh
は指定されたホスト名 に接続し、(オプションが指定された場合はそのユーザ で)ログインします。ユーザはリモートマシンに対して、本人であることを証明する必要があります。プロトコルのバージョンに応じて、これにはいくつかある方法からひとつを使います (下記参照) :
コマンド が指定された場合、リモートホスト上ではログインシェルのかわりにそのコマンドが実行されます。
オプションは次のとおりです:
-1
ssh
がプロトコル バージョン 1 のみを使うよう強制します。-2
ssh
がプロトコル バージョン 2 のみを使うよう強制します。-4
ssh
が IPv4 アドレスのみを使うよう強制します。-6
ssh
が IPv6 アドレスのみを使うよう強制します。-A
認証エージェントの転送には注意が必要です。リモートホスト上で (エージェントの UNIX ドメインソケットに対する)ファイルアクセス権限を無視できてしまうユーザがいる場合は、転送された接続を介してローカル側の認証エージェントにアクセスできてしまうことになります。攻撃側は認証エージェントから鍵そのものを盗むことはできませんが、認証エージェントがもっている鍵に認証をおこなわせることはできます。
-a
-b
bindするアドレス -C
CompressionLevel
設定項目によって変更できます。圧縮は、モデムその他の遅い接続においては必要ですが、高速なネットワークでは速度が低下するだけです。このデフォルト値はホスト間ごとに設定ファイルに書くことができます。Compression
設定項目を参照してください。-c
暗号方式 プロトコル バージョン 1 の場合、指定できる方式はひとつで"3des 、""blowfish"および"des"がサポートされています。3des (トリプル des) は 3 つの異なる鍵を使って暗号化-復号化-暗号化をおこないます。これは安全であると考えられているためです。blowfish は高速なブロック暗号方式で、かなり安全であり、3des よりもずっと高速です。des は、3des 暗号をサポートしていない、もはや古くなったプロトコル 1 の実装と相互運用するためにのみサポートされています。des 暗号は弱いため、このオプションを使用することはおすすめできません。デフォルトは"3des"です。
プロトコル バージョン 2 では、cipher_spec はカンマで区切られたリストになっており、暗号方式の優先順位を指定できます。現在サポートされている暗号方式は以下のとおりです:3des-cbc ,aes128-cbc ,aes192-cbc ,aes256-cbc ,aes128-ctr ,aes192-ctr ,aes256-ctr ,arcfour128 ,arcfour256 ,arcfour ,blowfish-cbc ,そしてcast128-cbc 。デフォルトでは
になっています。aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour128,arcfour256,arcfour,aes192-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr
-D
ssh
は SOCKS サーバのようにふるまいます。特権ポートを転送できるのはスーパーユーザだけです。動的ポート転送は設定ファイルでも指定できます。
IPv6 アドレスはこれとは別の形式で指定できます: [bindするアドレス /]
ポート あるいは、アドレスを角カッコ [ ] で囲んでください。特権ポートを転送できるのはスーパーユーザだけです。デフォルトでは、ローカル側のポートはGatewayPorts
の設定に従って bind されますが、bindするアドレス を明示的に使うことで特定のアドレスに接続を bind することもできます。bindするアドレス が"localhost"になっている場合、そのポートはローカルホストのみが使用可能であることを示します。いっぽう、空のアドレスや `*' を指定すると、そのポートはすべてのインターフェイスに対して使用可能になります。
-e
エスケープ文字 -F
設定ファイル /etc/ssh/ssh_config
~/.ssh/config
になっています。-f
ssh
がコマンドを実行する直前に、バックグラウンドに移行するよう指示します。これはssh
にパスワードあるいはパスフレーズを入力する必要はあるものの、そのコマンド自体はバックグラウンドで実行させたいときに便利です。これは-n
オプションも含んでいます。リモートサイトで X11 プログラムを起動させる場合には、
もしExitOnForwardFailure
設定項目が"yes"になっている場合、-f
で開始されたクライアントはすべてのポート転送の確立が成功するまで待ってから、バックグラウンドに移行します。
-g
-I
スマートカードデバイス ssh
がユーザの RSA 秘密鍵を格納するスマートカードと通信するのに使うデバイスを指定します。このオプションはスマートカード・デバイスのサポートを有効にしてコンパイルされているときだけ有効です(デフォルトではサポートされていません)。-i
identityファイル ~/.ssh/identity
、プロトコル バージョン 2 の場合は~/.ssh/id_rsa
および~/.ssh/id_dsa
になっています。identity ファイルは設定ファイルによって、ホストごとに指定することもできます。複数の-i
オプションを指定することも可能です。(設定ファイルで複数の鍵を指定することもできます。)-K
-k
-L
GatewayPorts
の設定に従って bind されますが、bindするアドレス を明示的に指定することで、特定のアドレスに接続をふり向けることができます。bindするアドレス として"localhost"を指定すると、ポートを listen するのはローカルな使用のみに限ることになります。いっぽう、空のアドレスまたは `*' を指定すると、そのポートはすべてのインターフェイスに対して使用可能になります。-l
ログイン名 -M
ssh
を、接続を共有するための"master"モードにします。-M
オプションを複数個つけるとssh
は"master"モードになり、slave 接続を受けつける前に確認を求めます。詳細についてはssh_config (5)
のControlMaster
の項を参照してください。-m
MAC指定 MACs
の項をご覧ください。-N
-n
/dev/null
からリダイレクトするように(つまり標準入力からの読み込みを禁止した状態に) します。ssh
をバックグラウンドで走らせるときには、このオプションが不可欠です。よくある手としては、リモートマシン上で X11 のプログラムを走らせるときにこれを使うことです。たとえば、ssh
プログラムはこの後バックグラウンドに移行するでしょう。(これはssh
がパスワードあるいはパスフレーズを訊いてくるときには使えません。-f
オプションを参照してください。)-O
制御コマンド -O
オプションが指定されている場合、制御コマンド の指令はマスタープロセスに渡されます。使用可能なコマンドは以下のとおりです:"check"(マスタープロセスが走っているかどうかチェックする)および"exit"(マスタープロセスを終了するよう指示する)-o
オプション
- AddressFamily
- BatchMode
- BindAddress
- ChallengeResponseAuthentication
- CheckHostIP
- Cipher
- Ciphers
- ClearAllForwardings
- Compression
- CompressionLevel
- ConnectionAttempts
- ConnectTimeout
- ControlMaster
- ControlPath
- DynamicForward
- EscapeChar
- ExitOnForwardFailure
- ForwardAgent
- ForwardX11
- ForwardX11Trusted
- GatewayPorts
- GlobalKnownHostsFile
- GSSAPIAuthentication
- GSSAPIDelegateCredentials
- HashKnownHosts
- Host
- HostbasedAuthentication
- HostKeyAlgorithms
- HostKeyAlias
- HostName
- IdentityFile
- IdentitiesOnly
- KbdInteractiveDevices
- LocalCommand
- LocalForward
- LogLevel
- MACs
- NoHostAuthenticationForLocalhost
- NumberOfPasswordPrompts
- PasswordAuthentication
- PermitLocalCommand
- Port
- PreferredAuthentications
- Protocol
- ProxyCommand
- PubkeyAuthentication
- RekeyLimit
- RemoteForward
- RhostsRSAAuthentication
- RSAAuthentication
- SendEnv
- ServerAliveInterval
- ServerAliveCountMax
- SmartcardDevice
- StrictHostKeyChecking
- TCPKeepAlive
- Tunnel
- TunnelDevice
- UsePrivilegedPort
- User
- UserKnownHostsFile
- VerifyHostKeyDNS
- VisualHostKey
- XAuthLocation
-p
ポート -q
-R
ポート転送は設定ファイルによっても指定できます。特権ポートを転送できるのは、リモートマシン上に root としてログインしているときだけです。IPv6 アドレスの場合はアドレスを角カッコ [ ] の中に入れるか、別の形式で指定します: [bindするアドレス /] ホスト /ポート /ホスト側ポート
デフォルトでは、サーバ側で listen するソケットはループバックインターフェイスのみに bind されます。これはbindするアドレス を指定することによって上書きすることができます。空のbindするアドレス または * をアドレスとして指定すると、サーバ側のソケットはすべてのインターフェイスに対して listen するようになります。bindするアドレス にループバック以外の値が指定できるのは、GatewayPorts
オプションが許可されているときのみです (sshd_config (5)
を参照してください)。
-S
制御用パス名 ControlMaster
およびControlPath
の項を参照してください。-s
-T
-t
-t
をつけると、たとえssh
がローカル側での端末を持っていない場合でも強制的に仮想端末を割り当てます。-V
-v
ssh
が進行中のデバッグメッセージを表示するようにします。これは接続や認証、設定の問題をデバッグするときに助けとなります。複数の-v
オプションをつけると出力が増えます。最大は 3 個です。-w
TunnelDevice
項目も参照してください。Tunnel
項目が指定されていない場合、トンネルモードはデフォルトの"point-to-point"になります。-X
X11 の転送には注意が必要です。リモートホスト上で (そのユーザの X 認証のための) ファイルアクセス権限を無視できてしまうユーザがいる場合は、転送された接続を介してローカル側のX11 ディスプレイにアクセスできてしまうことになります。すると攻撃側はキーストロークを盗み見るなどの行為が可能になってしまうかもしれません。
このため、デフォルトでは X11 転送は X11 SECURITY 拡張機能の制約をうけるようになっています。詳しくは、ssh
の-Y
オプション、およびssh_config (5)
のForwardX11Trusted
項目を参照してください。
-x
-Y
さらにssh
は、設定情報をユーザごとの設定ファイルおよび、システム全体にわたる設定ファイルから取得します。このファイルの形式と設定項目はssh_config (5)
で説明されています。
ssh
はリモートで実行されたコマンドの終了状態か、もしエラーが発生した場合は 255 を終了状態として返します。
ssh
はプロトコル バージョン 1 に戻ります。この設定はssh_config (5)
のProtocol
設定項目で変更するか、あるいは-1
または-2
オプション (上記参照) によって強制的に指定できます。どちらのプロトコルも類似の認証機構をサポートしていますが、プロトコル バージョン 2 はより強力な秘匿性(通信は AES、 3DES、 Blowfish、 CAST128 または Arcfour で暗号化されます) および正真性(hmac-md5, hmac-sha1, umac-64, hmac-ripemd160) を提供しているため、こちらのほうが好まれます。プロトコル バージョン 1 は接続の正真性を保証する(訳注: 内容の改ざんを防ぐ) 強力な機構が用意されていません。
認証方式として使用可能なのは、GSSAPIベースの認証 (GSSAPI-based authentication)、ホストベースド認証 (host-based authentication)、公開鍵認証 (public key authentication)、チャレンジ・レスポンス認証 (challenge-response authentication)およびパスワード認証 (password authentication) です。認証方式はここに示した順序で使用されます。ただしプロトコル バージョン 2 ではPreferredAuthentications
設定項目によりこのデフォルトの順序を変更することもできます。
ホストベースド認証 (hostbased authentication) は以下のように動作します:ユーザがssh
を実行するマシンが、リモートマシン側の/etc/hosts.equiv
あるいは/etc/shosts.equiv
に記載されており、さらにそのユーザ名が双方で同じか、あるいはリモートマシン上のそのユーザのホームディレクトリに~/.rhosts
あるいは~/.shosts
が存在して、クライアントマシンの名前とそのマシン上でのそのユーザ名が記載されている場合、そのユーザのログインが考慮されます。サーバはさらに、このクライアントのホスト鍵(以下の/etc/ssh/ssh_known_hosts
と~/.ssh/known_hosts
を参照)が必ず正しいことを要求します。これが正しければログインが許可されます。この認証方式により IP 詐称、DNS 詐称やルーティング詐称などの攻撃が迂回できます。[管理者のかたに注意: 一般的にいって、/etc/hosts.equiv 、
~/.rhosts および
rlogin/rsh プロトコルは本質的に危険であり、セキュリティを考慮するのであれば禁止すべきです。]
公開鍵認証 (public key authentication) は以下のようにして動作します:このやりかたは公開鍵暗号技術に基づいており、暗号化と復号をそれぞれ別の鍵を使っておこなうことができ、さらに復号用の鍵から暗号化用の鍵を推測することは現実的にできないような暗号方式を使っています。このアイデアは、まず各ユーザが認証のための「秘密鍵」と「公開鍵」とよばれる鍵の対をつくります。サーバは公開鍵を知っていますが、秘密鍵のほうはユーザだけが知っているものとします。ssh
は公開鍵認証を実装しており、RSA あるいは DSA 方式を使用しています。プロトコル バージョン 1 が使えるのはRSA 方式だけですが、プロトコル バージョン 2 ではどちらも使うことができます。ssl (8)
の歴史セクションでは、これら 2つの方式について簡単に説明しています。
~/.ssh/authorized_keys
ファイルには、ログインが許可されている公開鍵の一覧が書かれています。ユーザがログインする際、ssh
プログラムは、そのユーザがどの鍵の対を使って認証しようとしているかをサーバに伝えます。クライアントは自分が秘密鍵にアクセスできることをサーバに対して証明し、サーバはそれに対応する公開鍵がそのアカウントを受け入れる権限をもっているかどうかを調べます。
ユーザはssh-keygen (1)
を使って自分の鍵の対をつくります。このプログラムは、秘密鍵をユーザのホームディレクトリ内の~/.ssh/identity
(プロトコル バージョン 1)、~/.ssh/id_dsa
(プロトコル バージョン 2、DSA 方式) あるいは~/.ssh/id_rsa
(プロトコル バージョン 2、RSA 方式) に格納し、公開鍵を~/.ssh/identity.pub
(プロトコル バージョン 1)、~/.ssh/id_dsa.pub
(プロトコル バージョン 2、DSA 方式) あるいは~/.ssh/id_rsa.pub
(プロトコル バージョン 2、RSA 方式) に格納します。ユーザはこの公開鍵をリモートマシン上の自分のホームディレクトリにある~/.ssh/authorized_keys
ファイルにコピーする必要があります。authorized_keys
ファイルは従来の~/.rhosts
ファイルに相当し、1 行ごとにひとつの鍵を格納します。各行はかなり長くなることもあります)。この後、ユーザはパスワードなしでログインすることができます。
公開鍵認証を使う際にいちばん便利なのは「認証エージェント」と呼ばれるものを使うことでしょう。詳しくはssh-agent (1) のマニュアルページをごらんください。
チャレンジ・レスポンス認証は以下のようにして動作します:サーバは任意の"チャレンジ"文字列を送り、応答 (レスポンス) を求めます。プロトコル バージョン 2 では複数のチャレンジとレスポンスを許可しています。プロトコル バージョン 1 で使えるチャレンジとレスポンスは1 つだけです。チャレンジ・レスポンス認証の例としては、BSD 認証 (login.conf (5) を参照) や PAM (OpenBSD 以外のいくつかのシステム) などがあります。
もし他の認証方法が失敗した場合、ssh
はユーザにパスワードを要求します。このパスワードは検査のためリモートホストに送られますが、すべての通信は暗号化されているため、ネットワークを盗聴している何者かによってパスワードが見られてしまうようなことはありません。
ssh
はこれまでに使った鍵すべてが入っているデータベースを自動的に保持し、検査します。これらのうち、ホスト鍵はユーザのホームディレクトリにある~/.ssh/known_hosts
に格納されます。これらに加え、/etc/ssh/ssh_known_hosts
も既知のホストとして自動的に検査されます。新しいホストは、ユーザ側のファイルに自動的に追加されていきます。もしあるホストの鍵がこれまでと変わっていた場合、ssh
は警告を発してパスワード認証を禁止します。これはサーバの詐称やなりすまし攻撃を防ぐためです。StrictHostKeyChecking
設定項目はホスト鍵が知られていなかったり、それが変更されていた場合のログインを防ぐために使われます。
そのユーザが本人であることが確認できると、サーバは与えられたコマンドを実行するか、あるいはユーザをそのマシンにログインさせてリモートマシンでの標準的なシェルを与えます。リモートのシェルやコマンドにおけるすべての通信は自動的に暗号化されます。
仮想端末が割り当てられている場合(通常のログインセッション時)、ユーザは以下のエスケープ文字を使うことができます。
仮想端末が割り当てられていない場合、そのセッションは透過になります。そのため、バイナリデータでも確実に転送できます。ほとんどのシステムでは、たとえ仮想端末が割り当てられている場合でもエスケープ文字に"none"を設定することによって、そのセッションを透過にすることができます。
セッションは、リモートマシン上のコマンドやシェルが完了し、すべての X11 や TCP 接続が閉じられると終了します。
ssh
ではエスケープ文字を使った機能がいくつかサポートされています。
チルダ記号そのものを 1 回入力するには
EscapeChar
設定項目あるいはコマンドラインの-e
オプションで変更できます。
現在サポートされているエスケープ機能(エスケープ文字はデフォルトの ~ と仮定します) :
~.
~^Z
~#
~&
ssh
をバックグラウンドに移行させ、転送された接続あるいは X11 のセッションが終了するのを待ってログアウトします。~?
~B
~C
-L
や-R
オプション (上記参照) を使っていて、ポート転送を追加したい場合に有効です。また、これは-KR
[bindするアドレス :] ポート を使うことによって、すでに有効になっているリモート側のポート転送を中止することも可能です。-h
オプションを使ってください。~R
以下の例では、IRC クライアントとサーバの通信を暗号化する方法を紹介します。たとえ IRC サーバが暗号化を直接サポートしていなくても、通信を暗号化することができます。これは以下のようにして動作します:まず、ユーザがリモートホストにssh
で接続し、リモートのサーバに接続を転送するために使うポート番号を指定します。このあと、クライアントマシン上で暗号化のサービスを開始し、ローカルな同じポートに接続すると、ssh
はその接続を暗号化して転送します。
以下の例では IRC のセッションをクライアントマシン"127.0.0.1"(localhost)からリモートのサーバ"server.example.com"へとトンネリングします:
$ ssh -f -L 1234:localhost:6667 server.example.com sleep 10$ irc -c '#users' -p 1234 pinky 127.0.0.1
これはポート 1234 を使って IRC サーバ"server.example.com"への接続をトンネリングし、ニックネーム"pinky"で"#users"チャンネルに join します。ポート番号は、1024 以上であり(特権ポートを使用できるのは root だけです)、他のポートとかち合わなければどこでもかまいません。この接続はリモートサーバ上のポート 6667 に転送されます。これが IRC サービスの標準的なポート番号だからです。
-f
オプションはssh
をバックグラウンド化させるために利用し、リモートコマンド"sleep 10"はトンネリングするサービスが開始されるまでに一定の時間 (この例では 10 秒) を与えています。もしここで指定された時間内に接続が行われない場合、ssh
は終了するでしょう。
ForwardX11
項目が"yes"に設定されており (または上記の-X
および-x
オプションを参照してください)、ユーザが X11 を使っている (環境変数DISPLAY が設定されている) 場合、X11 ディスプレイへの接続は自動的にリモート側に転送されます。つまり、シェル (あるいはコマンド) から起動された X11 プログラムはみな暗号化された通信路を通り、本来の X サーバへの接続はローカルマシン上からなされるようになります。ユーザはDISPLAY を手動で設定すべきではありません。X11 接続の転送はコマンドラインあるいは設定ファイルによって設定できます。
ssh
によって設定されたDISPLAY の値はサーバマシン上を指すようになっていますが、ディスプレイ番号は 0 より大きい値になっているでしょう。これは正常な状態です。ssh
は暗号化された通信路を介して接続を転送します。そのため、サーバマシン上に X サーバの"プロキシ"をつくるのでこうなるのです。
また、ssh
はサーバマシン上で Xauthority 情報を自動的に用意します。ssh
はこのためにランダムな認証クッキーを生成し、サーバ側のXauthority に格納し、接続が転送されるときはすべてこのクッキーを持たせるようにします。そして接続が開かれるときに、これが本物のクッキーと置き換わるようにするのです。本物の認証クッキーがサーバ側に送られることは決してありません(し、暗号化されないままでクッキーが送られることもありません)。
ForwardAgent
設定項目が"yes"になっていて、ユーザが認証エージェントを使っている場合、認証エージェントに対する接続は自動的にリモート側に転送されます。(以下で説明する-A
and-a
オプションも参照のこと)。
StrictHostKeyChecking
設定項目で禁止されていない限り)ユーザにはそのサーバの公開鍵の指紋 (fingerprint) が提示されます。指紋はssh-keygen (1)
コマンドによって得ることができます:
もしこの指紋がすでにわかっている場合、これが一致するかどうかを見て、その鍵を受け入れるか拒否するかを決めることができます。しかし2つのホスト鍵が一致しているかどうかを、16進文字列を見比べて判断することは難しいため、random art技術を使って、これらのホスト鍵を視覚的に比較することができます。VisualHostKey
設定項目を"yes"にすると、サーバにログインするたびに (そのセッションが対話的であるかないかに関わらず)小さなアスキーアートが表示されます。あらかじめ、既知のサーバが返すパターンを見ておくことにより、ユーザはそのホスト鍵が完全に違うパターンになっているかどうかを容易に判定することができます。これらのパターンに曖昧性はありません。あるパターンが以前のものに似ている場合、それはホスト鍵が高い確率で同じであるとはいえますが、完全な保証ではありません。
既知のすべてのホスト鍵に対して、それらの指紋の random art パターンを表示したい場合は、以下のコマンドを使ってください:
指紋がまだわかっていない場合、別の方法として、SSH の指紋を DNS によって検証することができます。追加の資源レコード (RR) である SSHFP を zone ファイルに追加し、接続するクライアントが提示された公開鍵とその指紋を照合することができます。
以下の例では、あるクライアントがサーバ"host.example.com"に接続するものとします。まずSSHFP 資源レコードを host.example.com の zone ファイルに追加する必要があります:
$ ssh-keygen -r host.example.com.
ここで出力された行を zone ファイルに追加します。このゾーンが指紋の問い合わせに応答するかどうかは、以下のようにしてチェックできます。
最後に、クライアントが以下のようにして接続します:
$ ssh -o "VerifyHostKeyDNS ask" host.example.com[...]Matching host key fingerprint found in DNS.Are you sure you want to continue connecting (yes/no)?
詳しくはssh_config (5)
のVerifyHostKeyDNS
設定項目を参照してください。
ssh
は、仮想ネットワークデバイスであるtun (4)
を使った、仮想プライベートネットワーク (VPN) のトンネリングをサポートしています。これにより、異なる 2 つのネットワークを安全に結合することができます。sshd_config (5)
ファイルにあるPermitTunnel
設定項目は、サーバがこの機能をサポートするかどうか、およびサポートするレベル (レイヤ 2 あるいはレイヤ 3)を指定します。
以下の例では、SSH サーバがリモートのネットワークのゲートウェイとして 192.168.1.15 で動いていると仮定した場合にクライアント側のネットワーク 10.0.50.0/24 と、リモート側のネットワーク 10.0.99.0/24 とを、10.1.1.1 から 10.1.1.2 への point-to-point 接続を使って結合します。このときリモート側ネットワークのゲートウェイでは 192.168.1.15 でSSH サーバが走っており、この接続を許可しているものとします。
クライアント側:
# ssh -f -w 0:1 192.168.1.15 true# ifconfig tun0 10.1.1.1 10.1.1.2 netmask 255.255.255.252# route add 10.0.99.0/24 10.1.1.2
サーバ側:
# ifconfig tun1 10.1.1.2 10.1.1.1 netmask 255.255.255.252# route add 10.0.50.0/24 10.1.1.1
クライアントのアクセス権限はサーバ側の/root/.ssh/authorized_keys
ファイル (下記参照)、およびサーバのPermitRootLogin
設定項目でより細かく制御できます。以下のエントリは、PermitRootLogin
項目が"forced-commands-only"に設定されている場合のもので、ユーザ jane に対してはtun (4)
デバイス 1番 への接続を許可し、ユーザ john に対してはtun デバイス 2 番 への接続を許可します:
tunnel="1",command="sh /etc/netstart tun1" ssh-rsa ... janetunnel="2",command="sh /etc/netstart tun2" ssh-rsa ... john
SSH 経由の VPN は大きなオーバーヘッドをともなうため、これはワイヤレス VPN などの、一時的な設定にのみ使うのが望ましいでしょう。より長期的な VPN 接続は、ipsecctl (8) やisakmpd (8) といったツールを使うほうが優れています。
ssh
はふつう以下の環境変数を設定します:ssh
によって、"hostname:n"という形の値が自動的に設定されます。ここで"hostname"の部分はシェルが走っているホストを表しており、 `n' [Ge] 1 の整数です。ssh
は X11 接続を安全な通信路で転送するために、この特別な値を使います。X11 の接続が安全でなくなってしまうため、ユーザは環境変数DISPLAY を自分で設定すべきではありません(また、それをやってしまうとユーザは認証に必要なクッキーを手でコピーしなければならなくなります)。ssh
のコンパイル時に指定されます。ssh
が端末から起動されているとssh
はパスフレーズをその端末から要求します。ssh
が制御できる端末を持っておらず、環境変数DISPLAY およびSSH_ASKPASS が設定されている場合、ssh
はSSH_ASKPASS によって指定されるプログラムを起動し、X11 ウインドウを使ってパスフレーズを要求します。これはssh
を.xsession
やそれに類するスクリプトから呼び出す際にとくに役に立ちます。(マシンによっては、これがうまく動くためには標準入力を/dev/null
にリダイレクトする必要があるかもしれません)
これらに加えて、ssh
は~/.ssh/environment
ファイルが存在してユーザがその変更を許可されていればそれを読み込み、"VARNAME=value"という形式の行を環境変数に追加します。より詳しい情報については、sshd_config (5)
のPermitUserEnvironment
設定項目を参照してください。
.rhosts
とまったく同じように扱われます。このファイルを使うと、rlogin や rsh ではログインできないようにしつつ、ホストベースド認証を許可することができます。
ssh
は、他人にアクセスできるようになっている秘密鍵ファイルは無視するので注意してください。鍵を作成するときにパスフレーズを指定することも可能です。このパスフレーズはファイル中の見られるべきでない部分を、3DES を使って暗号化するのに用いられます。
ssh
によって実行されます。より詳しい情報についてはsshd (8)
のマニュアルを見てください。
/etc/hosts.equiv
とまったく同じように扱われます。このファイルを使うと、rlogin や rsh ではログインできないようにしつつ、ホストベースド認証を許可することができます。
ssh
を setuid root しておく必要があります。プロトコル バージョン 2 の場合、ssh
はホスト鍵のアクセスにssh-keysign (8)
を使用します。これにより、ホストベースの認証方法を使うときもssh
を setuid root しておく必要がなくなります。デフォルトではssh
は setuid root されていません。
ssh
によって実行されます。より詳しい情報についてはsshd (8)
のマニュアルを見てください。