OpenSSH

SSHとは、ネットワークを介して安全な通信を行うためのプロトコル。強力な認証機能と暗号化により、ファイル転送やリモート操作を安全に行うことができる。

SSHの認証手順

  1. ホスト認証
  2. ユーザー認証
    1. 公開鍵認証
    2. パスワード認証

ホスト認証

ホスト認証とは、接続先ホストの正当性を確かめる手段。これによってなりすましによる偽の SSHサーバに接続してしまうことを防ぐ。ホスト認証は、SSHサーバのホスト認証鍵を使って行われる。

ユーザー認証

ユーザー認証方法は複数用意されている。代表的なものは

  • 公開鍵認証
  • パスワード認証

公開鍵認証は公開鍵暗号方式を利用してユーザーを認証する。公開鍵認証を行うには、サーバ側にあらかじめ公開鍵を登録しておく必要がある。

  1. あらかじめサーバに公開鍵を登録
  2. 接続時にユーザーの鍵が利用できるか確認
  3. ユーザーは、公開鍵やユーザー名からデータを作成し、秘密鍵による電子署名を行う
  4. 上記データと電子署名をサーバに送る
  5. サーバ側でデータと署名を検証
  6. 検証に成功した場合ログインを許可する
公開鍵と秘密鍵

公開鍵暗号方式では、一対の公開鍵と秘密鍵の鍵ペアを使って暗号化と複合を行う。

公開鍵 暗号化に利用
電子署名の検証に利用
秘密鍵 復号化に利用
秘密鍵による電子署名を行う

ある公開鍵を使って暗号化されたものは、対になる秘密鍵を用いてのみ復号化することができる。また、秘密鍵を使った電子署名は、対になる公開鍵を使うことで検証することができる。

SSHサーバの設定

Linux ではオープンソースのソフトウェア、OpenSSH が採用されている

OpenSSH を利用するのに必要なパッケージ
  • openSSH
  • openssh-server
  • openssh-client
  • openssl
  • openssh-askpass (必須ではない)
  • openssh-askpass-gnome (必須ではない)

SSHサーバの設定ファイル

  • /etc/ssh/sshd_config

デフォルトのままでも利用可能。安全性をさらに高める、設定変更するとき用に

Port

SSH はデフォルトで22番ポートを使う。変更する場合、コメントアウトし、ポート番号を変更する。

#Port 22
Protocol

デフォルトでは、SSH バージョン1、 SSH バージョン2 両方のプロトコルを扱う。クライアント側がバージョン2に対応しているのであれば、「Protocol 2」としておくのが吉

Protocol 2
PermitRootLogin

root ユーザーによるログインを許可するかどうかを指定する。万が一 root パスが推測された場合、ログインを許してしまうことになるため、「PermitRootLogin no」としておくのが安全

#PermitRootLogin yes
RSAAuthentication

SSH バージョン1での公開鍵認証を許可するかどうかを指定する。デフォルトでは許可。

#RSAAuthentication yes
PubkeyAuthentication

SSH バージョン2での公開鍵認証を許可するかどうかを指定する。デフォルトでは許可。

#PubkeyAuthentication yes
PermitEmptyPasswords

パスワード認証を許可している場合、空パスワードを許可するかどうかを指定する。セキュリティを高めるため「PermitEmptyPasswords no」としておくのが無難

#PermitEmptyPasswords no
PasswordAuthentication

パスワード認証を許可するかどうかを指定する。公開鍵認証の設定が完了すればパスワード認証は必要ないため、設定完了後に「PasswordAuthentication no」とするとセキュリティあっぷ

PasswordAuthentication yes

SSH クライアントの利用方法

SSHクライアントコマンドは、openssh-client パッケージに含まれている。
主なコマンド

ssh telnet の代替コマンドとして利用できる
scp ファイルコピーを行う

ssh コマンド

SSHクライアントからSSHサーバへ接続する。基本的な書式

ssh ユーザー名@ホスト名 or IPアドレス

例)ホスト「host」に、ユーザー「hoge」としてログイン

ssh hoge@host

初回接続時、SSHサーバからホスト認証鍵が送られてくるので、受け入れる場合は「yes」と入力。次にパスワードを入力するとログインが完了する。ホスト認証鍵はユーザーの 「 ~/.ssh/known_hosts 」 ファイルに格納される。
※ ホスト認証鍵のバックアップなしでサーバを再インストールした場合、初回起動時にホスト認証鍵が自動的に生成される。新たなホスト認証鍵は以前のものとは異なるため、そのままでは警告が出る。このような場合、「 ~/.ssh/known_hosts 」 ファイル内の該当エントリを削除すれば解決する

SCP コマンド

SCPコマンドは、SSH の仕組みを使って安全にファイルをコピーするコマンド
基本的な書式

scp ユーザー名@コピー元ホスト:コピー元ファイル名 ユーザー名@コピー先ホスト:コピー先ファイル名

例) ローカルホストからリモートホストへのコピー

scp /etc/hosts host03:/tmp

例) リモートホストからローカルホストへのコピー

scp host03:etc/hosts .

例) ユーザーを指定してのコピー

scp /etc/hosts hoge@host03:/home/hoge

公開鍵認証の利用

公開鍵認証を使うと、パスワードを使わないでログインできる。その代わり、正当な秘密鍵と、秘密鍵を利用するためのパスフレーズを使う。公開鍵認証を利用するには、まず公開鍵と秘密鍵の鍵ペアを作成する必要がある。

鍵ペアの作成
ssh-keygen オプション

公開鍵と秘密鍵は、SSH のバージョンと暗号化アルゴリズムによる複数の種類がある
SSH の鍵ファイル

SSH バージョン 秘密鍵ファイル 公開鍵ファイル ssh-keygen コマンドのオプション
バージョン1 identity identity.pub -t rsa1
バージョン2 (RSA) id_rsa id_rsa.pub -t rsa
バージョン2 (DSA) id_dsa id_dsa.pub -t dsa

例) バージョン2 (DSA) の鍵ペア作成

ssh-keygen -t dsa
  1. 鍵ファイルの名前を指定
    通常はデフォルトでOKなのでそのまま [Enter] キーを押せばOK
  2. パスフレーズの入力
    秘密鍵を使う時に求められるパスフレーズを2度入力する。パスワードよりも長い、空白を含めた文字列の指定が可能。 [Enter] キーのみを押すと空のパスフレーズが作成される。

鍵ペアは、「 ~/.ssh 」ディレクトリ以下に作成される

公開鍵のコピー

公開鍵ファイルを SSHサーバ内の ~/.ssh/authorized_keys ファイルに登録する。

scp .ssh/id_dsa.pub host03:

SSH 関連ファイルのパーミッション

ファイル名 パーミッション 内容
~/.ssh 700 (必須) 他のユーザーにアクセス権がないようにする
~/.ssh/id_dsa 400 (推奨) 誤って書き換えないようにする
~/.ssh/id_dsa.pub 400 (推奨) 他のユーザーに書き込まれないようにする
~/.ssh/authorized_keys 600 (推奨) 他のユーザーに書き込まれないようにする