SSH

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page SSH and the translation is 97% complete.

Outdated translations are marked like this.
Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎italiano • ‎русский • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어
Resources

SSH (Secure SHell) は、Unix ライクな OS の古い telnet ツールを置き換える、暗号化ターミナルプログラムです。

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

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

インストール

インストールの確認

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

user $ssh
usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I pkcs11] [-i identity_file]
           [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-p port]
           [-Q cipher | cipher-auth | mac | kex | key]
           [-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] [user@]hostname [command]

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

USE フラグ

USE flags for net-misc/openssh Port of OpenBSD's free SSH release

X Add support for X11
X509 Adds support for X.509 certificate authentication
audit Enable support for Linux audit subsystem using sys-process/audit
bindist Disable EC/RC5 algorithms in OpenSSL for patent reasons.
debug Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces
hpn Enable high performance ssh
kerberos Add kerberos support
ldns Use LDNS for DNSSEC/SSHFP validation.
libedit Use the libedit library (replacement for readline)
libressl Use dev-libs/libressl instead of dev-libs/openssl when applicable (see also the ssl useflag)
livecd Enable root password logins for live-cd environment.
pam Add support for PAM (Pluggable Authentication Modules) - DANGEROUS to arbitrarily flip
pie Build programs as Position Independent Executables (a security hardening technique)
sctp Support for Stream Control Transmission Protocol
security-key Include builtin U2F/FIDO support
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
ssl Enable additional crypto algorithms via OpenSSL
xmss Enable XMSS post-quantum authentication algorithm

Emerge

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

root #emerge --ask --changed-use net-misc/openssh

設定

鍵の作成

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

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

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

root #/usr/bin/ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ""
root #/usr/bin/ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""

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

root #/usr/bin/ssh-keygen -t ed25519 -a 100 -f /etc/ssh/ssh_host_dsa_key -N ""
root #/usr/bin/ssh-keygen -t rsa -b 4096 -o -a 100 -f /etc/ssh/ssh_host_rsa_key -N ""

サーバーの設定

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

セキュリティーに主眼をおいた設定をするために Sven Vermeulen (SwifT)OpenSSH ガイドを読むことをおすすめします。

クライアントの設定

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

  • ~/.ssh/config
  • /etc/ssh/ssh_config

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

user $man ssh_config

パスワードなしの認証

git サーバーを管理するのに便利です。

クライアント

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

user $ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/larry/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/larry/.ssh/id_rsa.
Your public key has been saved in /home/larry/.ssh/id_rsa.pub.
The key fingerprint is:
de:ad:be:ef:15:g0:0d:13:37:15:ad:cc:dd:ee:ff:61 larry@client
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|     .           |
| . .. n   .      |
|   . (: . .      |
|  o   . . : .    |
| . ..: >.> .     |
|  * ?. .         |
| o.. .. ..       |
| :. .  ! .       |
+-----------------+

サーバー

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

user $ssh-copy-id <server>
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/larry/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
larry@<server>'s password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '<server>'"
and check to make sure that only the key(s) you wanted were added.

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

user $ssh <server>
larry@<server>

そしてサーバー側では、/etc/ssh/sshd_configPasswordAuthentication no を設定するべきです。

単一マシンでのテスト

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

user $ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/larry/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
...
user $mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
user $ssh localhost

侵入の防止

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

使い方

サービス

OpenRC

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

root #rc-update add sshd default

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

root #rc-service sshd start

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

root #rc-service sshd start
root #rc-service sshd stop
root #rc-service sshd restart
Note
サーバーへのアクティブな SSH 接続は、rc-service sshd restart が実行されても影響を受けず維持されます。

systemd

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

root #systemctl enable sshd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/sshd.service to /usr/lib64/systemd/system/sshd.service.

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

root #systemctl start sshd.service

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

root #systemctl status sshd.service

エスケープシーケンス

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

ssh>~?

トラブルシューティング

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

user $ssh example.org -v
user $ssh example.org -vv
user $ssh example.org -vvv

長時間続いている接続が切断される

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

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

  • ローカルサーバーに接続しているすべてのクライアントに対して keep alive を有効にするには、ClientAliveInterval 30 (またはその他の秒単位の値)を /etc/ssh/sshd_config ファイルで設定します。
  • ローカルクライアントから接続するすべてのサーバーに対して keep alive を有効にするには、ServerAliveInterval 30 (またはその他の秒単位の値)を /etc/ssh/ssh_config ファイルで設定します。

X11 フォワーディングでフォワーディングまたはトンネリングされない

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

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

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

user $echo $DISPLAY
localhost:10.0

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

user $ssh -t larry@localhost2 bash --noprofile

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

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

参考

外部の情報