Secure Shell デーモン (sshd) は通常、ネットワークサービスが開始されるブート時にブートされます。デーモンは、SSH クライアントからの接続を待機します。Secure Shell セッションは、ssh、scp、または sftp コマンドが実行されると開始します。接続を受信するたびに、新しい sshd デーモンがフォークされます。フォークされたデーモンは、鍵の交換、暗号化、認証、コマンドの実行、およびクライアントとのデータ交換を行います。Secure Shell セッションの特性は、クライアント構成ファイルとサーバー構成ファイルによって決定されます。コマンド行引数は、構成ファイルの設定をオーバーライドできます。
SSH クライアントおよびサーバーは、相互に認証する必要があります。認証に成功したあと、ユーザーはコマンドをリモートで実行でき、システム間でデータをコピーできます。
Secure Shell サーバー側の sshd デーモンの動作は、/etc/ssh/sshd_config ファイルのキーワードを設定することで変更できます。たとえば、sshd_config ファイルにより、サーバーにアクセスするときに使用する認証タイプを変更できます。サーバー側の動作は、sshd デーモンを起動するときに、コマンド行オプションによって変更することもできます。
クライアント側の動作は、Secure Shell のキーワードで変更できます。キーワードの優先順位は次のとおりです。
コマンド行オプション
ユーザーの構成ファイル (~/.ssh/config)
システム全体の構成ファイル (/etc/ssh/ssh_config)
たとえば、ユーザーはコマンド行を使用して aes128-ctr を優先するシステム全体の構成 Ciphers の設定をオーバーライドできます。
$ ssh -c aes256-ctr,aes128-ctr,arcfour
これで、最初の暗号化方式 aes256-ctr が優先されるようになります。
Secure Shell プロトコルは、SSH クライアントユーザー/ホストの認証、およびサーバーホストの認証をサポートしています。Secure Shell セッションを保護するために、暗号化鍵が交換されます。Secure Shell は、認証と鍵交換のためのさまざまな方法を提供します。その中には、任意のものもあります。クライアント認証メカニズムは、表 1に示されています。サーバーは、既知のホスト公開鍵を使用して認証されます。
認証については、Secure Shell はユーザー認証と、通常はパスワードを必要とする汎用対話型認証をサポートしています。Secure Shell はまた、ユーザー公開鍵と信頼できるホスト公開鍵による認証もサポートしています。鍵は、RSA の場合と DSA の場合があります。セッション鍵の交換は、サーバー認証手順で署名される Diffie-Hellman 短期鍵の交換で構成されます。さらに、Secure Shell は認証に GSS 資格を使用することもできます。
Secure Shell で GSS-API 認証を使用するには、サーバーが GSS-API アダプタの資格を持ち、クライアントが GSS-API のイニシエータの資格を持つ必要があります。mech_krb5 のサポートを使用できます。
mech_krb5 では、サーバーは、サーバーに対応するホスト主体が /etc/krb5/krb5.keytab で有効なエントリを持つと、GSS-API アダプタの資格を持ちます。
クライアントは、次のどちらかによって、mech_krb5 に対するイニシエータの資格を持ちます。
kinit コマンドが実行された。
pam_krb5 モジュールが pam.conf ファイルで使用されている。
GSS-API および Kerberos については、Oracle Solaris 11.3 での Kerberos およびその他の認証サービスの管理 の Kerberos ユーティリティーを参照してください。メカニズムの詳細は、mech(4) および mech_spnego(5) のマニュアルページを参照してください。
認証が完了すると、ユーザーは通常、シェルまたはコマンド実行を要求して Secure Shell を使用します。ユーザーは、ssh のオプションを使用して、要求を行うことができます。要求には、擬似端末の配置、X11 または TCP/IP の接続の転送、セキュリティー保護された接続上での ssh-agent 認証プログラムの有効化などがあります。
ユーザーセッションの基本手順は次のとおりです。
ユーザーがシェルまたはコマンドの実行を要求し、セッションモードを開始します。
セッションモードでは、SSH クライアント側では、データは端末を通して送受信されます。また、サーバー側ではシェルまたはコマンドを介して送受信されます。
データの転送が完了すると、ユーザープログラムは終了します。
既存の接続を除いて、すべての X11 接続と TCP/IP 接続の転送を停止します。既存の X11 接続と TCP/IP 接続は、開いたままです。
SSH サーバーは、終了ステータスのメッセージをクライアントに送信します。開いたままになっていた転送先のポートなど、すべての接続が切断されると、クライアントはサーバーへの接続を切断します。その後、クライアントが終了します。