Linux LPIC - SSH



 ◆ データの暗号化方式

 データの暗号化方式には、共通鍵暗号と公開鍵暗号の大きく2つがあります。共通鍵暗号においては
 データの暗号化と復号に同じ鍵を使用しますが、公開鍵暗号では暗号化に公開鍵を使用して、復号に
 秘密鍵という別の鍵を使用します。公開鍵暗号では、受信者は公開鍵を公開しておき、送信者はその
 公開鍵で暗号化し送信します。データは受信者のみ持つ秘密鍵でしか復号できないので盗聴されにくい。



 ◆ SSH(Secure SHell)とは

 SSHはネットワークに接続した機器を遠隔操作するために使用するアプリケーション層のプロトコル
 です。telnetの場合はパスワード情報を含め全てのデータが暗号化されずに送信されますが、SSHの
 場合は、パスワード情報を含めて全てのデータが公開鍵で暗号化されて送信されます。安全な通信を
 実現するための手段として、現在ではよく利用されています。SSHコマンドの書式は以下の通りです。

 ◆ 構文 : ssh オプション 接続ホスト

オプション 説明
 -1  SSHプロトコルバージョン 1 を使用
 -2  SSHプロトコルバージョン 2 を使用
 -l ユーザ名  ログインユーザー名を指定
 -p ポート番号  リモートホスト接続時に使用するポート番号を指定


 ◆ 実行例 : ユーザー「mike」として、srv1.infraeye.com にSSH接続する実行コマンド ( IPアドレスで指定してもOK )
 # ssh -l mike srv1.infraeye.com



 ユーザーがログインしてシェルあるいはコマンドを実行する直前に、SSHは、/etc/sshrcファイルに
 記述されているコマンドを実行します。SSHでの接続時にはログイン時と同様、全ユーザー共通の設定
 ファイル(
/etc/sshrc)とユーザー毎に読み込まれる設定ファイル(~/.ssh/.config)が読み込まれます。


  



 SSHプロトコルを使用したネットワーク接続ツールの代表例として
OpenSSHというツールがあります。
 OpenSSHのデーモンsshdの設定ファイルは、
/etc/ssh/sshd_configファイルとなります。sshd_config
 の主な設定項目は以下の通りです。

設定項目 説明
 Port  SSHで使用するポート番号 (デフォルトで 22 を使用)
 Protocol  SSHのバージョン( 1 または 2 )
 HostKey  ホストの秘密鍵ファイル
 PermitRootLogin  rootユーザーのログインを許可するかどうか
 RSAAuthentication  SSHバージョン 1 での公開鍵を使用するかどうか
 PubkeyAuthentication  SSHバージョン 2 での公開鍵を使用するかどうか
 AuthorizedKeysFile  公開鍵が格納されるファイル名
 PermitEmptyPasswords  空のパスワードを許可するかどうか
 PasswordAuthentication  パスワード認証を許可するかどうか
 X11Forwarding  X11転送を許可するかどうか


 ◆ 例えば root ユーザのログインを拒否するためには/etc/ssh/sshd_configの「 #PermitRootLogin yes 」を以下のように変更

 
# vi /etc/ssh/sshd_config
 PermitRootLogin no

 # service sshd restart



 なお、OpenSSHをインストールすると、以下のホストの公開鍵と秘密鍵が生成されます。

ファイル名 説明
 ssh_host_key  秘密鍵 ( バージョン 1 で使用 )
 ssh_host_dsa_key  秘密鍵 ( バージョン 2 DSAで使用 )
 ssh_host_rsa_key  秘密鍵 ( バージョン 2 RSAで使用 )
 ssh_host_key.pub  公開鍵 ( バージョン 1 で使用 )
 ssh_host_dsa_key.pub  公開鍵 ( バージョン 2 DSAで使用 )
 ssh_host_rsa_key.pub  公開鍵 ( バージョン 2 RSAで使用 )


 ◆ SSH - 鍵の生成

 SSHで公開鍵と秘密鍵のペアを作成するためには
ssh-keygenコマンドを使用します。書式は以下の通り。

 ◆ 構文 : ssh-keygen オプション

オプション 説明
-p  既存の秘密鍵ファイルのパスフレーズを変更
-t

 生成する鍵の種類( rsa1 または rsa または dsa )を指定。一般的に"rsa1"は使用しない。
 rsa1 - SSHv1のRSA  rsa - SSHv2のRSA  dsa - SSHv2のDSA


特徴 説明
RSA  電子署名と通信暗号化に利用できる。電子署名のサイズが長く暗号化強度が強い。
DSA  電子署名にのみ利用できる。電子署名のサイズが短く暗号化強度が弱い。


 ◇ RSA暗号化の場合 ( 推奨 )

 ◆ 実行例 : RSA暗号方式の鍵を作成
 # ssh-keygen -t rsa


 RSA暗号方式の鍵を生成した場合、秘密鍵と公開鍵は次のファイルパスに生成されます。

説明
秘密鍵  ユーザーのホームディレクトリ/.ssh/id_rsa
公開鍵  ユーザーのホームディレクトリ/.ssh/id_rsa.pub


 ssh-keygenコマンドで生成した公開鍵は、以下のパスで公開鍵リストとして追加されます。

説明
公開鍵リストのパス  ユーザーのホームディレクトリ/.ssh/authorized_keys




 ◇ DSA暗号化の場合

 ◆ 実行例 : DSA暗号方式の鍵を作成
 # ssh-keygen -t dsa


 DSA暗号方式の鍵を生成した場合、秘密鍵と公開鍵は次のファイルパスに生成されます。

説明
秘密鍵  ユーザーのホームディレクトリ/.ssh/id_dsa
公開鍵  ユーザーのホームディレクトリ/.ssh/id_dsa.pub


 ssh-keygenコマンドで生成した公開鍵は、以下のパスで公開鍵リストとして追加されます。

説明
公開鍵リストのパス  ユーザーのホームディレクトリ/.ssh/authorized_keys




 ◆ SSHのホストベース認証

 ホストベース認証では、SSHサーバに登録済みのホストからSSH通信があった場合、そのユーザーを
 信用して接続を許可します。この場合、SSHサーバとクライアントはユーザー認証を行わずホストの
 認証のみを行います。SSHバージョン2のホストベース認証の鍵のファイルパスは、以下のとおりです。

暗号化方式 鍵のファイルパス
RSA 秘密鍵  /etc/ssh_host_rsa_key
公開鍵  /etc/ssh_host_rsa_key.pub
DSA 秘密鍵  /etc/ssh_host_dsa_key
公開鍵  /etc/ssh_host_dsa_key.pub





 ◆ SSHエージェント

 秘密鍵ファイルを使用する際はパスフレーズが聞かれるが
ssh-agentを利用することでこのパスフレーズを
 入力することなく、つまりパスワード認証なしにログインすることができます。ssh-agentはクライアント側
 で稼働するデーモンです。秘密鍵をメモリ上に保存しておいて必要時に利用されるため、都度パスフレーズを
 入力する必要はありません。ssh-agentを利用するためにはssh-agentの子プロセスとしてbashシェルを起動。

 $ ssh-agent bash


 次にssh-addコマンドを使用して秘密鍵を登録します。この際にパスフレーズを入力しておきます。以降は
 このbashシェルと子プロセスでは、パスフレーズの入力は不要となります。なお、ssh-agent が保持して
 いる秘密鍵の一覧は ssh-add -l コマンドを実行することで分かります。


 
$ ssh-add

 Enter passphrase for /home/mike/.ssh/id_rsa:
 Identity added: /home/mike/.ssh/id_rsa (/home/student/.ssh/id_rsa)





 ◆ GnuPGによるファイル暗号化 - 鍵ペアの作成、失効証明書の作成

 SSHでは通信の暗号化が行われますが、
GPGGnuPG)はファイルの暗号化と復号が行えるオープン
 ソフトウェアです。GnuPGでは、公開鍵暗号を使用してファイルの暗号化と復号、電子署名をしたり
 することができます。GnuPGを使用するためには
gpgコマンドを使用します。先ず、公開鍵と暗号鍵
 の鍵ペアを作成する必要があり、以下のコマンドで生成します。

 # gpg --gen-key


 このコマンドの実行過程で、~/.gnupgというディレクトリが生成されます。そして、その中に公開鍵の
 キーリング(pubring.gpg)秘密鍵のキーリング(secring.gpg)が作成されます。キーリングとは公開鍵
 や秘密鍵を保管しておく鍵用のファイルのことです。GnuPGキーリングは、次のファイルに格納されます。

キーリング ファイルパス
公開鍵キーリング  ユーザーのホームディレクトリ/.gnupg/pubring.gpg
秘密鍵キーリング  ユーザーのホームディレクトリ/.gnupg/secring.gpg


 次に、パスフレーズ紛失時や忘れた時のために鍵を無効化できる鍵の失効証明書を作成します。

 ◆ 構文 : gpg -o 失効証明書ファイル名 --gen-revoke メールアドレス

 ◆ 実行例 : myrevoke.ascという名前の失効証明書の作成
 $ gpg -o myrevoke.asc --gen-revoke mike@infraeye.com


 パスフレーズの紛失時、パスフレーズを忘れた場合は以下のコマンドで無効化できます。

 $ gpg --import myrevoke.asc


 ◆ GnuPGによるファイル暗号化 - 公開鍵を使用したファイルの暗号化

 通信相手に公開鍵を送るため、公開鍵をファイルにエクスポートしてこのファイルを通信相手に送ります。


 ◇ 公開鍵のエクスポート

 先ず、自分のメールアドレスでファイルを受け取り、以下の例では「pubkey」ファイルを相手に送ります。

 ◆ 構文 : gpg -o 出力ファイル名 -a --export 自分のメールアドレス
 $ gpg -o pubkey -a --export mike@infraeye.com


 ◇ 公開鍵のインポート

 次に、通信相手から公開鍵を受け取ったら、それをインポートします。

 ◆ 構文 : gpg -import 公開鍵のファイル
 $ gpg --import pubkey


 次に、鍵に署名を行います。これにより警告メッセージが出力されないようになります。

 $ gpg --sign-key mike@infraeye.com




 ◆ GnuPGによるファイル暗号化 - ファイルの暗号化と復号

 ◇ ファイルの暗号化
 ◆ 構文 : gpg -e -a -r 送信先のメールアドレス 暗号化するファイル名

 ◆ 実行例 : mike@infraeye.comの受信者だけが復号できるよう、test.txtを暗号化 ( test.txt.asc が生成される )
 $ gpg -e -a -r mike@infraeye.com test.txt


 ◇ ファイルの復号
 ◆ 構文 : gpg 暗号化されたファイル

 ◆ 実行例 : 送信されてきたtest.txt.ascファイルを、秘密鍵を使用して復号 ( パスフレーズを入力 )
 $ gpg test.txt.asc



LPIC Web教科書

Copyright(C) 2002-2017 ネットワークエンジニアとして All Rights Reserved