SSH/ja

SSH (Secure SHell) は、Article description::リモートマシンに安全にログインし、作業を行うためのユビキタスなツールです. すべての機密情報は強固に暗号化され、リモートシェルとしての機能だけでなく、ファイル転送と、任意のプロトコルに対するポートフォワーディングにも対応しており、リモートサービスへの安全なアクセスを可能にします. 昔ながらの telnet、rlogin、その他同様の安全でないツールを置き換えますが、SSH はただのリモートシェルではなく、リモートシステムで作業を行うための機能が完備されている環境でもあります.

メインの コマンドに加えて、SSH プログラムスイートには  (Secure Copy Program)、 (Secure File Transfer Protocol)、または鍵の管理に役立つ  といったツールも含まれます. 標準的な SSH ポートは、ポート 22 です.

SSH には複数のバージョンが 存在していました. 現在最も広く使われている SSH の実装で、デファクトスタンダードとなっているのは、OpenBSD の OpenSSH です. これは Gentoo でも、BSD ("と、よりフリーな") ライセンスの下で公開されています.

SSH はマルチプラットフォームで、とても広く利用されています: OpenSSH はほとんどの Unix ライク OS、Windows 10、MacOS にデフォルトでインストールされていて、Android や "脱獄" した iOS にもインストールできます (SSH クライアントを利用できます). そのため、SSH は異種システム間の作業のための素晴らしいツールとなっています.

インストールの確認
は に含まれているので、Gentoo Linux が配置された環境には、OpenSSH が既にインストールされているはずです. 正しく機能する OpenSSH が存在しているかどうかは、ssh コマンドを実行すれば確認できます. 使い方の文章が出力されるはずです:

使い方が出力されない場合、OpenSSH が壊れているか、またはインストールされていないのかもしれません. に従って、USE フラグを変更した後の再ビルドと同じようにして、再インストールしてみてください. もし OpenSSH がインストールされていなかった場合は、これで再インストールされるはずです. そして、system 集合の一部として、インストールされたまま残り続けるはずです.

もしこれでも OpenSSH がインストールされないのであれば、パッケージがか、 に含まれているかもしれませんが、通常はそのようなことはないでしょう.

Emerge
USE フラグを変更したら、新しいフラグが適用されるように OpenSSH を再ビルドしてください. OpenSSH は system 集合に含まれているので、に追加しないように、 を使用するべきです:

内で OpenSSH に影響するグローバルな USE フラグを変更した後は、新しい USE フラグにアップデートするように world を emerge してください:

鍵の作成
安全なシェルを提供するために、暗号鍵が SSH の提供する暗号化、復号化、ハッシュといった機能の管理に使われています.

システム鍵がすべて生成されていない場合、 init スクリプトがその初回実行時に生成するでしょう. 通常は (システムが不正アクセスを受けていない限り) 再生成する必要はありませんが、そのような必要性が発生した場合は、 コマンドを使ってこれを手動で行うことができます (rsa、ecdsa および Ed25519 アルゴリズム):

サーバーの設定
SSH サーバーは設定ファイルの位置変更も含め OpenRC の で設定することもできますが、通常は  ファイルで設定されます. サーバーを設定する方法についての詳細は の man ページを参照してください.

SSH サーバはテストモードを使って構成ファイルの妥当性を検証する方法を提供します:

クライアントの設定
クライアントや関連プログラム(、 など)は以下のファイルを使って設定できます:



詳細については の を読んでください.

侵入の防止
SSH はよく攻撃されるサービスです. や といったツールはログを監視し、繰り返しログインを試行し失敗しているリモートユーザーをブラックリストに追加してくれます. 頻繁に攻撃されるシステムを安全に保つには、これらを必要に応じて活用しましょう.

サービス
SSH サーバを実行するためのコマンドは、有効な init システムによって異なります.

OpenRC
OpenSSH デーモンを default ランレベルに追加する:

sshd デーモンを開始するには:

OpenSSH サーバーは他の で管理されているサービスと同様にしてコントロールできます:

systemd
システム起動時に OpenSSH デーモンを起動するには:

OpenSSH デーモンをすぐに開始するには:

サービスが開始されているか確認するには:

コマンド
OpenSSH は複数のコマンドを提供します. 使い方については、各コマンドの を確認してください:


 * - 安全なファイルコピー
 * - 安全なファイル転送
 * - 認証エージェントに秘密鍵を追加する
 * - 認証エージェント
 * - ローカルで利用可能な鍵を使って、リモートマシンへのログインを認可されるようにする
 * - 認証鍵ユーティリティ
 * - サーバから SSH 公開鍵を集める
 * - OpenSSH デーモン

エスケープシーケンス
アクティブな SSH セッションの間にチルダキーを押すと、エスケープシーケンスが開始されます. オプションの一覧を見るには以下を入力してください:

このエスケープは改行の直後しか認識されないことに注意してください. エスケープは、 などの一部のシェルではうまく動作しないことがあります.

リモート SSH サーバへのパスワードレス認証
サーバーを管理するのに便利です. も確認してください.

クライアント
クライアントでは、もしまだ行っていなければ、鍵ペアを作成します. これは以下のコマンドで行えます(もちろん、パスワードは入力しないでください):

サーバ
ユーザー用のアカウントがサーバー上に存在することを確認し、クライアントの ファイルをサーバーのユーザーのホームディレクトリーにある  ファイルの中に配置してください. これは以下のコマンドをクライアントコンピューター上で実行することで行えます(ここではサーバー上のユーザーのパスワードを入力する必要があります):

これ以降は以下を実行することでパスワードなしでログインできるはずです:

そしてサーバー側では、 で  を設定するべきです.

単一マシンでのテスト
上の手順はローカルでテストすることもできます:

ssh 越しのリモートサービス
SSH は、暗号化された「トンネル」を介して、HTTP、HTTPS、ファイル共有などのリモートサービスにアクセスするために使用することができます. リモートサービスアクセスの詳細は、 と の記事にあります.

リモートホストへファイルをコピーする
SSH の一部である コマンドは、SSH ファイル転送プロトコルを使用して、リモートホストへファイルをコピーします. この目的では も代替となりえます.

ssh-agent
OpenSSH には、キャッシュにより頻繁なパスワード入力を防止する デーモンが同梱されています. これを起動すると、ssh-agent の通信ソケットを指すために SSH_AUTH_SOCK 環境変数が使用されます. をセットアップする通常の方法は、ユーザのセッションの最上位プロセスで実行することです. そうしないと、環境変数がセッション中で確認することができません.

グラフィカルユーザセッションを起動するように構成されている場合、 を起動するための適切な方法を見つけるのは複雑になることがあります. 例えば、 ディスプレイマネージャを使用している場合は、 を編集して:

の部分を、以下のようにしてください:

にセッションを通して一度だけパスワードを入力させるようにするには、 を手動で実行するか、  オプションを利用してください.

最近の は  (と ) を自動的に起動します. これらが両方ともインストールされている場合は、両方が自動起動され、特にスマートカードが絡む場合にアイデンティティ管理が複雑になります. 少なくとも SSH のエージェントか、あるいは両方の XFCE による自動起動を停止して、シェル、X セッションまたはそれに類するものを使用してください.

セッションを維持するためのターミナルマルチプレクサ
接続が切れた後でセッションを再開するために、を使用することができます. と は、接続が切れたときにコマンドが実行中だったとしてもセッションに再接続できる、2 つの人気のあるマルチプレクサです.

不安定な接続の上での SSH
インターネット接続が不安定な場合や、ネットワーク間をローミングしている (wifi ネットワーク間を移動しているなどの) 場合は、SSH セッションが切断されないようにするために を利用することができます.

Kitty 端末でセッションのために新しいタブを開く
端末エミュレータでは SSH kitten を使用することで、現在の SSH セッションで、再ログインすることなく、新しい「タブ」またはウィンドウを開くことができます.

Kitty はその他にも実用的な SSH 機能を提供しています.

トラブルシューティング
問題への対処に役立つかもしれない、3つの異なるデバッグモードレベルがあります. オプションを使うと、SSH は自身の進捗についてデバッグメッセージを出力します. これは接続、認証、そして設定の問題をデバッグする際に有用です. 複数の  オプションを付けるとより詳細な情報が出力されます. 最も詳細なのは3番目のレベルです.

パーミッションが広すぎる
ssh 接続は、 ディレクトリとその内容のファイルパーミッションが正しい場合にだけ、動作するでしょう.
 * ディレクトリパーミッションは 700 (drwx--) であるべきです. 所有者が完全なアクセス権を持ち、他はだれもアクセスできません.
 * 以下について:
 * 公開鍵ファイルのパーミッションは 644 (-rw-r--r--) であるべきです. 誰でもファイルを読むことができ、所有者だけが書き込むことができます.
 * 他のすべてのファイルのパーミッションは 600 (-rw---) であるべきです. 所有者だけがファイルを読み書きできます.

これらのパーミッションは、クライアントとサーバの両側で正しく設定されている必要があります.

長時間続いている接続が切断される
インターネットに接続するデバイスの多くはネットワークアドレス変換 (Network Address Translation、) を使っています. これは、家庭やビジネスでよく使われているプライベートネットワーク上のデバイスから、ネットワークで1つの IP アドレスしか持っていないにもかかわらず、外部ネットワークにアクセスするための仕組みです. 残念なことに、すべての NAT デバイスが同じに作られているわけではなく、またそのうちいくつかは SSH で使われているような長時間持続し時折使われる TCP 接続を不正に閉じてしまいます. これは一般的に、 クライアントプログラムが終了していないにも関わらず突然サーバーと対話できなくなるという形で識別できます.

この問題を解決するために、OpenSSH クライアントとサーバーでは 'keep alive'、すなわちリンクの持続状況を維持・確認するための不可視なメッセージを送信するよう設定できます:


 * ローカルサーバーに接続しているすべてのクライアントに対して keep alive を有効にするには、 (またはその他の秒単位の値)を  ファイルで設定します.
 * ローカルクライアントから接続するすべてのサーバーに対して keep alive を有効にするには、 (またはその他の秒単位の値)を  または  ファイルで設定します.
 * 切断を減らすように、 を設定します.

例えば、サーバの設定を変更するには:

クライアントの設定を変更するには:

新しい鍵が使用されない
This scenario covers the case when a key to access a remote system has been created, the public key installed on the remote system, but the remote system is (for some reason) not accessible via ssh. This can happen if the name of the keyfile is not known to ssh.

Confirm which key files ssh is trying by running it with one of the verbose options, as described at the start of the. The verbose output will include the names of the keyfiles it is trying, and the one (if any) that actually gets used.

The default key files for the system are listed in the, see the commented-out lines containing  directives.

There are several ways to use a key with a non-default name.

The key name can be specified on the command line every time:

Alternatively, modify the ssh configuration to add a special case for ssh to the remote system:

If any are specified, it appears to be necessary to specify all the desired keys on a remote host. Read up on the ssh IdentityFile.

X11 フォワーディングでフォワーディングまたはトンネリングされない
問題点: X11 フォワーディングを許可するように設定ファイルを変更した後も X アプリケーションがサーバー上で実行され、クライアントにフォワーディングされない.

解決策: おそらく、リモートサーバーやホストへの SSH ログインの間に DISPLAY 変数が unset されたか、または SSH セッションがそれをセットした後にセットされています.

この状況をテストするには、リモートログインの後に以下を実行します:

出力は  か、あるいはサーバー側で   の設定をしている場合は   といったものになるはずです. 通常の  が表示されない場合、 中の DISPLAY 変数が unset または再初期化されていないことを確認してください. もしそうなっていたら、SSH ログインの途中で 内のそのコードが実行されないようにするため、 DISPLAY 変数のカスタムした初期化をすべて削除またはコメントアウトしてください:

上のコマンドの  は適切なユーザー名に必ず置き換えてください.

この作業を完了させるために使える方法として、ユーザーの ファイルでエイリアスを定義するというものがあります.

関連項目

 * (Security Handbook)
 * (Security Handbook)
 * (Security Handbook)
 * (Security Handbook)
 * (Security Handbook)
 * (Security Handbook)
 * (Security Handbook)
 * (Security Handbook)
 * (Security Handbook)
 * (Security Handbook)
 * (Security Handbook)

外部資料

 * — SSH Proxy Command -- connect.c
 * https://lonesysadmin.net/2011/11/08/ssh-escape-sequences-aka-kill-dead-ssh-sessions/amp/ - エスケープシーケンスについてのブログ記事.
 * https://hackaday.com/2017/10/18/practical-public-key-cryptography/ - Practical public key cryptography (Hackaday).
 * https://www.akadia.com/services/ssh_putty.html - ポートフォワーディングの解説.