This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
SSH
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
+pie
|
Build programs as Position Independent Executables (a security hardening technique) |
+ssl
|
Enable additional crypto algorithms via OpenSSL |
audit
|
Enable support for Linux audit subsystem using sys-process/audit |
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 |
kerberos
|
Add kerberos support |
ldns
|
Use LDNS for DNSSEC/SSHFP validation. |
legacy-ciphers
|
Enable support for deprecated, soon-to-be-dropped DSA keys. See https://marc.info/?l=openssh-unix-dev>m=170494903207436>w=2. |
libedit
|
Use the libedit library (replacement for readline) |
livecd
|
Enable root password logins for live-cd environment. |
pam
|
Add support for PAM (Pluggable Authentication Modules) - DANGEROUS to arbitrarily flip |
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 |
static
|
!!do not set this during bootstrap!! Causes binaries to be statically linked instead of dynamically |
test
|
Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently) |
verify-sig
|
Verify upstream signatures on distfiles |
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_config の man page を参照してください。
セキュリティーに主眼をおいた設定をするために Sven Vermeulen (SwifT) の OpenSSH ガイドを読むことをおすすめします。
クライアントの設定
ssh クライアントや関連プログラム(scp、sftp など)は以下のファイルを使って設定できます:
- ~/.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_config で PasswordAuthentication 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 はよく攻撃されるサービスです。sshguard や fail2ban といったツールはログを監視し、繰り返しログインを試行し失敗しているリモートユーザーをブラックリストに追加してくれます。頻繁に攻撃されるシステムを安全に保つには、これらを必要に応じて活用しましょう。
使い方
サービス
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
サーバーへのアクティブな 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 ファイルでエイリアスを定義するというものがあります。
参考
- Securing the SSH service (セキュリティーハンドブック)
- Keychain —
- autossh — a command that detects when SSH connections drop and automatically reconnects them.
- SCP — an interactive file transfer program, similar to the copy command, that copies files over an encrypted SSH transport.
- SFTP — an interactive file transfer program, similar to ftp, which performs all operations over an encrypted SSH transport.
- SSHFS — a secure shell client used to mount remote filesystems to local machines.
- Gentoo ハンドブック — インストール — SSHデーモンの開始
- Sakaki's_EFI_Install_Guide/Setting_Up_Networking_and_Connecting_via_ssh#Connecting_via_ssh_and_Using_screen
外部の情報
- Securing OpenSSH - Gentoo 開発者 ドキュメント。
- net-misc/connect — 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 記事