OpenSSH はリモートマシンへのセキュアなアクセスに使われるネットワーク接続ツールの集合です。 また、TCP/IP 接続を OpenSSH 接続経由でセキュアにトンネル/フォワードすることもできます。 OpenSSH はすべてのトラフィックを暗号化し、 盗聴や接続の乗っ取り等のネットワークレベルの攻撃を事実上無効化します。
OpenSSH は OpenBSD プロジェクトによって維持管理されており、 FreeBSD にはデフォルトでインストールされています。 OpenSSH は、 SSH バージョン 1 と 2 の両方に互換性があります。
データがネットワークを平文で流れてしまうと、 ネットワークをクライアントとサーバの間のどこかで盗聴することで、 あなたのユーザ/パスワード情報やセション中を流れるデータを盗むことが可能です。 OpenSSH はこれらを予防する為にさまざまな認証と暗号化の方法を提供します。
sshd(8) が有効になっているかどうかを確認するには、
/etc/rc.conf
の以下の行を確認してください。
sshd_enable="YES"
この設定により、次のシステムの初期化時に OpenSSH のデーモンプログラムである sshd(8) が起動します。 もしくは service(8) を使って、すぐに OpenSSH を起動することもできます。
#
service sshd start
ssh(1) を使って、 sshd(8) が動いているシステムに接続するには、 ログインをするユーザ名とホストを指定してください。
#
ssh user@example.com
Host key not found from the list of known hosts. Are you sure you want to continue connecting (yes/no)?yes
Host 'example.com' added to the list of known hosts. user@example.com's password:*******
SSH はクライアントが接続した時、
サーバの信頼性の検証のために鍵指紋システム
(key fingerprint system) を利用します。
初めての接続の際に、ユーザは yes
と入力することを要求されます。
これ以降の login では保存されていた鍵指紋を照合することで検証が行われ、
ssh(1) クライアントは保存されていた鍵指紋が login
しようとした際に送られてきたものと異なっていた場合には警告を表示します。
指紋は ~/.ssh/known_hosts
に保存されます。
デフォルトでは、sshd(8)
の最近の版では SSH v2
の接続のみを受け付けるように設定されています。
クライアントは可能であればバージョン 2 を用い、
バージョン 1 にフォールバックします。
クライアントは、プロトコル v1 と v2
についてそれぞれ、引数 -1
または -2
を渡すことで、利用するプロトコルを指定できます。
クライアントにおけるバージョン 1 への互換性は、
古いバージョンへの上位互換のために維持されています。
ローカルのファイルをリモートマシンへ、 あるいはリモートマシンのファイルをローカルに安全な方法でコピーするには、 scp(1) を使用してください。
#
scp user@example.com:/COPYRIGHT COPYRIGHT
user@example.com's password:*******
COPYRIGHT 100% |*****************************| 4735 00:00#
前回の例でこのホストの指紋がすでに保存されていれば この scp(1) を使う時に検証が行なわれます。
scp(1) に渡される引数は、cp(1)
のものと似ており、コピーするファイル (1 つまたは複数) が
1 つめの引数になり、コピー先が 2 つめの引数になります。
ファイルはネットワーク越しに SSH
接続を通して送られるので、
引数に指定するファイルに
user@host:<path_to_remote_file>
という形式をとるものがあります。
システム全体の設定ファイルは、OpenSSH
デーモン、クライアントの両方とも
/etc/ssh
にあります。
ssh_config
はクライアントの動作設定、
sshd_config
はデーモンの動作設定を行ないます。
それぞれのファイル毎にマニュアルページが用意されており、
利用可能な設定オプションについて説明されています。
パスワードの代わりに ssh-keygen(1) を使ってユーザの認証用の DSA または RSA 暗号鍵を作ることができます。
%
ssh-keygen -t dsa
Generating public/private dsa key pair. Enter file in which to save the key (/home/user/.ssh/id_dsa): Created directory '/home/user/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user/.ssh/id_dsa. Your public key has been saved in /home/user/.ssh/id_dsa.pub. The key fingerprint is: bb:48:db:f2:93:57:80:b6:aa:bc:f5:d5:ba:8f:79:17 user@host.example.com
ssh-keygen(1) は認証に使う為の公開鍵と秘密鍵のペアを作ります。
DSA または RSA 鍵に応じて、
秘密鍵は ~/.ssh/id_dsa
または
~/.ssh/id_rsa
に保存され、
公開鍵は ~/.ssh/id_dsa.pub
または
~/.ssh/id_rsa.pub
にそれぞれ保存されます。
公開鍵はセットアップのために、
DSA または RSA
のどちらを使う場合にも、
リモートマシンの ~/.ssh/authorized_keys
に含まれてなければなりません。
この設定により、パスワードに代わり、 SSH 鍵を使ってリモートマシンに接続できるようになります。
多くのユーザは、鍵が設計上安全と信じ、
パスフレーズなしに鍵を利用しています。
このような使用方法は 危険 です。
管理者が鍵にパスフレーズが設定されているかを確認する方法は、
手動で鍵を調べる方法です。
秘密鍵のファイルに ENCRYPTED
という単語が含まれている場合には、
鍵の所有者は、パスフレーズを使用しています。
弱いパスフレーズが使われている間、
少なくともシステムが危険にさらされているときには、
他のサイトへのアクセスには、
あるレベルでのパスワード類推が必要となります。
さらに、公開鍵ファイルに from
を含めることで、
エンドユーザをより安全にできます。
たとえば、
ssh-rsa
または rsa-dsa
の前に、
from="192.168.10.5
を加えることで、
この IP
を持つホストからのユーザのみがアクセスできるようになります。
ssh-keygen(1) でパスフレーズを使っている場合は、 秘密鍵を使うためにユーザは毎回パスフレーズを入力する必要があります。 長いパスフレーズを毎回入力しなくてはならない負担は、 ssh-agent(1) を使うと軽減できます。 これについては、 「SSH Agent による鍵のキャッシュ」 で説明されています。
OpenSSH のバージョンによって、 オプションやファイルに違いが出てくることがあります。 ssh-keygen(1) を参照して、 問題が起こることを避けてください。
パスフレーズを毎回入力することなしに、 SSH 鍵を利用できるようにメモリに読み込むには、 ssh-agent(1) および ssh-add(1) を使用してください。
ssh-agent(1) は、 読み込まれた秘密鍵による認証を取り扱います。 ssh-agent(1) は他のアプリケーションの起動に用いられる必要があります。 基本的なレベルではシェル、 またはウィンドウマネージャを起動します。
シェル上で ssh-agent(1) を使うには、 引数としてシェルを起動してください。 次に、ssh-add(1) を実行し、 秘密鍵のパスフレーズを入力することにより、 鍵を追加してください。 一度この過程を終えてしまえば、ユーザは、 対応する公開鍵が置かれているホストに ssh(1) でログインできるようになります。 以下はその例です。
%
ssh-agentcsh
%
ssh-add Enter passphrase for /home/user/.ssh/id_dsa: Identity added: /home/user/.ssh/id_dsa (/home/user/.ssh/id_dsa)%
Xorg 上で
ssh-agent(1) を使うには、
ssh-agent(1) への呼び出しが
~/.xinitrc
に置かれている必要があります。
これにより、Xorg
上で起動されるすべてのプログラムにおいて、
ssh-agent(1) サービスが提供されるようになります。
~/.xinitrc
の例は以下となります。
exec ssh-agent startxfce4
これで、Xorg を開始するときにはいつでも ssh-agent(1) が起動され、 このプログラムから XFCE が起動されます。 Xorg を再起動した後は有効になりますので、 ssh-add(1) を実行して、 すべての SSH 鍵を読み込ませてください。
OpenSSH は暗号化されたセッションの中に他のプロトコルをカプセル化するトンネルを作ることができます。
以下のコマンドは ssh(1) で telnet(1) 用のトンネルを作成します。
%
ssh -2 -N -f -L 5023:localhost:23 user@foo.example.com
%
この例では、以下のオプションを使っています。
SSH のトンネルは
localhost
の指定されたポートに listen
するソケットを作ることで実現されています。
SSH
はローカルのホスト/ポートで受けた接続すべてを
SSH
接続経由で指定されたリモートホストのポートへ転送します。
この例では、localhost
のポート
5023
がリモートマシンの
localhost
のポート
23
に転送されるようになっています。
23
は
telnet(1) で用いられるので、これは SSH
トンネルを通る暗号化された man.telnet.1;
セッションを作ります。
このようにして SMTP や POP3 および FTP といったセキュアではない TCP プロトコルをカプセル化できます。
%
ssh -2 -N -f -L 5025:localhost:25 user@mailserver.example.com
user@mailserver.example.com's password:*****
%
telnet localhost 5025
Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mailserver.example.com ESMTP
ssh-keygen(1) と別のユーザアカウントを組み合わせて使うことでより透過的な SSH のトンネル環境を作ることができます。 パスワードを入力するところで暗号鍵を使い、 トンネルは別のユーザ権限で実行することが可能です。
ここでの例は、外部からの接続を受ける SSH サーバがあるとします。 同じネットワークには、POP3 サーバが動いているメールサーバがあるとします。 電子メールを安全なやり方で見るようにするには、 SSH サーバへの SSH 接続を行い、 メールサーバへのトンネルを作成することです。
%
ssh -2 -N -f -L 2110:mail.example.com:110 user@ssh-server.example.com
user@ssh-server.example.com's password:******
トンネルが作成されて動作したら、
メールクライアントに対し localhost
のポート 2110 に POP3 リクエストを送るように指示してください。
そこへの接続は、トンネルを経由して安全に
mail.example.com
に転送されます。
内向けおよび外向きの接続両方をフィルタするファイアウォールルールを課すネットワーク管理者もいます。 たとえば、 リモートのマシンからのアクセスに、ssh(1) および web サーフィンのための 22 番および 80 番ポートにしか接続させてもらえないかもしれません。 この場合 22 または 80 番以外を使う他のサービスへのアクセスを妨げます。
それに対する解決策は、 あなたが接続しているネットワークのファイアウォールの外部にあるマシンに対して SSH 接続を行い、 希望するサービスへのトンネルに利用することです。
%
ssh -2 -N -f -L 8888:music.example.com:8000 user@unfirewalled-system.example.org
user@unfirewalled-system.example.org's password:*******
この例では、ストリーミング Ogg Vorbis クライアントを
localhost
の 8888 番ポートに向けると、
music.example.com
の 8000
番ポートに転送され、ファイアウォールをすり抜けられます。
ログインできるユーザや接続元を AllowUsers
を使って制限することは、通常は良い考えです。
たとえば、
root
が
192.168.1.32
からのみログインできるようにするには、
以下の行を /etc/ssh/sshd_config
に追加してください。
AllowUsers root@192.168.1.32
admin
がどこからでもログインできるようにするには、
ユーザ名そのものを記述してください。
AllowUsers admin
複数のユーザは、以下のように同じ行に追加してください。
AllowUsers root@192.168.1.32 admin
注意すべきことは、 このコンピュータにログインする必要のあるすべてのユーザを指定することです。 設定されていないと、そのユーザはログインできなくなります。
/etc/ssh/sshd_config
への変更が終わったら、
以下を実行して、設定ファイルを sshd(8)
に読み込ませてください。
#
service sshd reload
OpenSSH ウェブサイト
クライアントオプションについて ssh(1), scp(1), ssh-keygen(1), ssh-agent(1), ssh-add(1) および ssh_config(5)
サーバオプションについて sshd(8), sftp-server(8), sshd_config(5)
本文書、および他の文書は https://download.freebsd.org/ftp/doc/ からダウンロードできます。
FreeBSD に関する質問がある場合には、
ドキュメント を読んだ上で
<questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、
<doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。