SSH/ja

SSH (Secure SHell) は、telnet ツールを置き換える、暗号化ターミナルプログラムです. ]]

主要な バイナリが提供するリモートターミナルアクセスに加えて、SSH プログラムスイートには  (Secure Copy Program) や  (Secure File Transfer Protocol) といったその他のツールも含まれるようになっています.

もともと、SSH はフリーではありませんでした. しかしながら、現在最も広く使われているデファクトスタンダードな SSH の実装は Gentoo でもプリインストールされている OpenBSD の OpenSSH です.

SSH is multi-platform, and is very widely used: OpenSSH is installed by default on most Unix-like OSs, on Windows10, on MacOS, and can be installed on Android or "jailbroken" iOS (SSH clients are available). This makes SSH a great tool for working with heterogeneous systems.

インストールの確認
Gentoo Linux のほとんどにおいては、OpenSSH が既にシステムにインストールされています. これは ssh コマンドを実行すれば確認できます. インストール済みなら使い方の文章が出力されるはずです:

使い方が出力されない場合、 が壊れているか、またはインストールされていません. また、新しい USE フラグを導入するために OpenSSH を単に再ビルドすることもできます. いずれにせよ、使用可能な USE 設定を見てみましょう.

If this does not try to install OpenSSH, the package may have been masked, or even listed in package.provided, though this would be unusual.

Emerge
必要な USE フラグを変更した後には、OpenSSH をインストール(または再ビルド)するのを忘れないでください:

After changing any global USE flags in make.conf that affect the OpenSSH package, emerge world to update to the new USE flags:

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

SSH サービスの初回起動時には、システム鍵が生成されます. 鍵は コマンドを使って(再)生成することができます.

SSH プロトコルバージョン2用の鍵(DSA および RSA アルゴリズム)を生成するには:

Secure Secure Shell の記事では Ed25519 および RSA 公開鍵アルゴリズムの使用が推奨されています:

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

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

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



詳細については のマニュアルを読んでください:

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

SSH サーバを起動する
Commands to run the SSH server will depend on active init system.

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

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

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

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

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

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

Commands
OpenSSH provides several commands, see each command's man page for usage information:


 * - secure file copy
 * - secure file transfer
 * - add private key identities to the authentication agent
 * - authentication agent
 * - use locally available keys to authorize logins on a remote machine
 * - authentication key utility
 * - gather SSH public keys from servers
 * - OpenSSH daemon

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

Note that escapes are only recognized immediately after a newline. They may not always work with some shells, such as fish.

パスワードなしの認証
git サーバーを管理するのに便利です.

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

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

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

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

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

Terminal multiplexers to preserve sessions
It is possible to use a terminal multiplexer to resume a session after a dropped connection. Tmux and screen are two popular multiplexers that can be used to be able to reconnect to a session, even if a command was running when the connection dropped out.

Mosh may be an alternative for some of SSH's functionality, for spotty connections.

Remote services over ssh
SSH may be used to access remote services through an encrypted "tunnel". Remote service access is detailed in the SSH tunneling and SSH jump host articles.

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

Permissions are too open
An ssh connection will only work if the file permissions of the directory and contents are correct.
 * The directory permissions should be 700 (drwx--), i.e. the owner has full access and no one else has any access.
 * Under :
 * public key files' permissions should be 644 (-rw-r--r--), i.e. anyone may read the file, only the owner can write.
 * all other files' permissions should be 600 (-rw---), i.e. only the owner may read or write the file.

These permissions need to be correct on the client and server.

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

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


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

For example, to modify the server's configuration:

To modify the client's configuration:

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

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

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

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

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

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

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

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

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

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

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

参考

 * Securing the SSH service (セキュリティーハンドブック)
 * Gentoo ハンドブック — インストール — SSHデーモンの開始
 * User:Sakaki/Sakaki%27s_EFI_Install_Guide/Setting_Up_Networking_and_Connecting_via_ssh
 * Gentoo ハンドブック — インストール — SSHデーモンの開始
 * User:Sakaki/Sakaki%27s_EFI_Install_Guide/Setting_Up_Networking_and_Connecting_via_ssh
 * Gentoo ハンドブック — インストール — SSHデーモンの開始
 * User:Sakaki/Sakaki%27s_EFI_Install_Guide/Setting_Up_Networking_and_Connecting_via_ssh
 * User:Sakaki/Sakaki%27s_EFI_Install_Guide/Setting_Up_Networking_and_Connecting_via_ssh

Copying files to a remote host
The SFTP command, a part of SSH, uses the SSH File Transfer Protocol to copy files to a remote host. rsync is also an alternative for this.



外部の情報

 * — 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).
 * wiki.archlinux.org の SSH 記事