メニュー 蕭寥亭 検索

自宅サーバ

5. libretto ff1100 : SSH 導入

 ウチのサーバー機・FF1100 ですが、ファンが回りだすと少しうるさい、コンセントが不足している、等の理由から自室ではなく他の部屋に置いてあります。以前はいちいち置いてある部屋へいって操作していたのですが、面倒なので今は SSH を使ったリモート操作に切り替えています。キーボードが小さくてキー入力がしにくい FF1100 から直に操作するより、デスクトップPCからターミナル・ソフトを使った方が使い勝手がよいですし、ブラウザでわからないことを調べつつ操作できるというのもありますね。

 ということで今回は SSH 関係なぞ。

1.SSH とは何か

 SSH とは Secure SHell の略で、ネットワーク上にあるコンピューター間で暗号化された安全な通信を行うためのプロトコルです。主に UNIX 系の OS で使用されており、リモートからログインすることでコマンドによる操作等が可能になります。

 リモートからのコマンド操作なら他のプロトコル、例えば Telnet でも可能なのですが、Telnet は通信が平文のまま行われるため安全が確保されている環境以外での使用はセキュリティ上危険です。わたしは通常家庭内LAN内でしか、リモートからのコマンド操作はしないのですが、それでも念のため SSH を使うようにしています。

2.SSH の設定

 Vine Linux 4.1 のインストールの種類を "Server" にした場合、OpenSSH というフリー版 SSH のパッケージが一通りすでにインストールされています。で、そのままの設定で使うこともできますが、セキュリティ上、一考の余地があります。

 そのため、OpenSSH のプロトコルサーバ sshd の設定ファイル /etc/ssh/sshd_config を、わたしは下記のように書き換えています。

Port 49888 ・・・ ①

							
Protocol 2 ・・・ ②

							
SyslogFacility AUTHPRIV ・・・ ③

							
PermitRootLogin no ・・・ ④

							
PasswordAuthentication no ・・・ ⑤

							
ChallengeResponseAuthentication no ・・・ ⑥

							
Subsystem sftp /usr/libexec/openssh/sftp-server ・・・ ⑦

							
AllowUsers dareka ・・・ ⑧

							
AllowTcpForwarding no ・・・ ⑨

							
ClientAliveInterval 30 ・・・ ⑩

 sshd_config の設定各項目の詳細については OpenSSH ホームページ にマニュアルがありますので、参照してください。

 上記の設定例のキーワードを簡単に解説しますと、まず① Port は sshd がリクエストを待ち受けるポートの番号を指定します。上記の設定ではポートを 49888 にしています。デフォルトは 22 です。Vine 4.1 の元の sshd_config には Port の指定がありません( # でコメントアウトされている)。このような場合はデフォルトの設定がそのまま使われます。

 ポートをデフォルトから変更するのは、sshd を少しでも攻撃されにくくするためです。sshd はメールやウェブサイトのように一般向けに公開されるようなサービスではなく、利用者はごく少数に限定されると思われますから、その少数の利用者が知ってさえいれば変更しても特に問題ないと思います。当サイトの場合は、わたししか使いませんし。

 49888 という番号はユーザーが自由に使用できる 49152 ~ 65535 の中から適当に選んだもので、これでなければならないということではありません。"# netstat -l" といったコマンドで空いているポートを確認してから選ぶとよいでしょう。

 ② Protocol は sshd で使用するプロトコルのバージョンを指定します。現在、プロトコルにはバージョン 1 とバージョン 2 の2種類がありますが、バージョン 1 には脆弱性があるため、上記の設定では 2 のみを指定しています。デフォルトは 2,1 となっており、両バージョンが使用できるようになっています。

 ③ SyslogFacility は syslog の分類コードを指定します。特に変更する必要はないようだったので、Vine 4.1 の元の設定を引き継いでそのまま使っています。デフォルトは AUTH です。

 ④ PermitRootLogin は root が直にログインできるかどうかを yes(可)または no(否)で指定します。ここも、Vine 4.1 の元の設定を引き継いでそのまま使っています。後述する⑧の設定や前回( 4. インストール直後にしていること )取り上げた su の制限と組み合わせてセキュリティの強化を図っています。デフォルトは yes です。

 ⑤ PasswordAuthentication はパスワード認証を許可するかどうかを yes(可)または no(否)で指定します。後述する公開鍵認証以外の認証方式は使わないことにしているので、no を指定しています。ここは Vine 4.1 の元の sshd_config もデフォルトも yes です。

 ⑥ ChallengeResponseAuthentication はチャレンジ/レスポンス認証を許可するかどうかを yes(可)または no(否)で指定します。チャレンジ/レスポンス認証とは、パスワードを元に特殊な処理を施して合成されたデータをサーバー/クライアント間でやり取りするにより認証を行う方式ですが、これも使いませんので Vine 4.1 の元の設定そのまま no を指定しています。デフォルトは yes です。

 ⑦ Subsystem は sshd から起動されるサブシステムを指定します。やはり Vine 4.1 の元の設定を引き継いで sftp /usr/libexec/openssh/sftp-server にしています。sftp がサブシステム名、/usr/libexec/openssh/sftp-server はその起動のために実行されるコマンドです。sftp についても後述します。デフォルトでは何も指定されていません。

 ⑧ AllowUsers はログインを許可するユーザーを指定します。ここで許可されたユーザーのみがログインできるようになります。上記では例として dareka を指定しています。使用環境に合わせて適宜指定してください。スペースで区切って複数のユーザーを指定することもでき、その場合は AllowUsers dareka1 dareka2 というように指定します。デフォルトではすべてのユーザーにログインが許可されており、Vine 4.1 の元の sshd_config では設定が省略されています(デフォルトと同じになります)。

 ⑨ AllowTcpForwarding は TCP 転送を許可するかどうかを yes(可)または no(否)で指定します。これも使いませんので no を指定しています。デフォルトは yes 、Vine 4.1 の元の sshd_config では設定が省略されています(デフォルトと同じになります)。

 ⑩ ClientAliveInterval は一定時間ごとにクライアントへ応答を要求するメッセージを送り、その後何秒間クライアントの応答を待つかを数字で指定します。上記の設定では30秒ということになります。デフォルトは 0 で、、ここも Vine 4.1 の元の sshd_config では設定が省略されているため、デフォルトと同じになります。

 なお、Vine 4.1 の元の sshd_config は UsePAM yes という設定をして PAM 認証を許可していますが、やはり使いませんので省略してデフォルトの PAM 認証不可を適用させています。

 設定項目は解説した以外にもたくさんありますが、省略しているので他はすべてデフォルトが適用されます。ここでは説明が煩瑣になるのでデフォルトのままでよい項目については設定を省略しましたが、適用される内容をわかりやすくしておくためには不要であっても各項目をあえて明示した方がよいかもしれません。

 sshd_config の編集が終わったら、変更した設定を反映させるために sshd を再起動します。

# /etc/init.d/sshd restart

 また、sshd の利用するポート(上記の例なら 49888 )へ外部からアクセスできるよう iptables の設定も忘れずに変更するようにしてください。ついでに ntsysv コマンド( 前回参照 )を使って起動登録も。

3.公開鍵認証用の鍵の生成

 わたしは基本的に SSH の認証には公開鍵認証のみを使っています。公開鍵認証とは公開鍵暗号を利用した認証方式を指します。 公開鍵認証は平文パスワード認証等と比較すれば格段に安全性が高いとされていますが、利用するためには公開鍵と秘密鍵の両方を事前に作成する必要がありため、以下の手順で作成します。公開鍵暗号についてはこちらの解説を参照してください。

 まず、SSH を利用することになっているユーザーでログインし、次のコマンドを使います。

$ ssh-keygen -t rsa ssh-keygen による鍵作成

 すると、"Generating public/private rsa key pair." というメッセージが出て(上の画像【1】)、鍵作成が実行されます。できるまで少し待ちます。

 鍵作成が終了すると今度は "Enter file in which to save the key (/***/.ssh/id.rsa):" と出ます(同【2】・ *** の部分はユーザーのホームディレクトリ)ので、適当なファイル名を入力します。ファイル名の入力を省略するとそのまま /***/.ssh/id.rsa になります。

 次に "Enter passphrase (empty for no passphrase):" ということで、パスフレーズの入力を求められます(同【3】)。こちらも省略可です。パスフレーズは SSH の認証で使いますが、Linux のログイン・パスワードとは違うものですので、別の文字列を入力しても同じでもどちらでもかまいません。

 入力するとパスフレーズの再入力が求められ(同【4】)、一致すれば鍵を格納したファイルが作成されます。上の画像の例ですと秘密鍵は /home/dareka/.ssh/id_rsa 、公開鍵は /home/dareka/.ssh/id_rsa.pub です。なお、公開鍵はデフォルトでは /***/.ssh/authorized_keys とすることになっているので、作成した後コマンド mv でファイル名を変更しています(同【5】)。

 秘密鍵はクライアント側で使うものなので、サーバー機から何らかの方法で移動させなければなりません。ですが、ネットを使った転送はなるべく避けましょう。盗聴される可能性は否定できないからです。フロッピー、USBメモリ等のメディアを使う方がよいと思います。移動させたらサーバー上の秘密鍵は消去します。不正使用されぬよう、クライアント側へ移した秘密鍵の管理は厳重に。公開鍵はそのままサーバー上に置いておいてください。

4.クライアントから接続

 サーバーの設定は終わったので、今度はクライアント側から接続します。

 クライアントが Windows 機の場合は SSH に対応したターミナルソフト(通信ソフト)が必要です。使えるものはいろいろありますが、ここでは無償で使用できるフリーソフト UTF-8対応TeraTerm Pro を例に説明します。

 まずは ここから最新版をダウンロードします。

 ダウンロードしたファイルはインストール用の実行形式ファイルになっているので、ダブルクリックするとインストールが開始されます。インストールの詳細は割愛しますが、基本的にはデフォルトのまま、インストーラーの指示に従って設定していけばよいでしょう。

 インストールが終わったら起動してみます。すると、接続のための設定画面が表示されます(下の画像)。

TeraTerm:新しい接続

 ここは「 TCP/IP 」を選択し、他の項目を下記のように設定します。

  • ホスト(T):サーバーのIPアドレスまたはホスト名(ここでは test )
  • TCPポート#(P):SSH サーバーのポート番号(ここでは 49888 )
  • サービス:SSH
  • SSHバージョン(V):SSH2

 設定ができたら「OK」を押して次へ。場合によっては警告画面が出ることがあります(下の画像)。

TeraTerm:セキュリティ警告

 念のため、ホスト鍵指紋を確認したいときはサーバーのコンソールから

$ ssh-keygen -l -f /ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key

で、ホスト鍵指紋が表示されますので、それが警告画面に表示されたホスト鍵指紋(画像では一部モザイク)と一致していれば、目的のホストへ接続できていると考えてよいことになります。

 続行する、あるいは警告画面が出ない場合は、次に認証画面になります(下の画像)。

TeraTerm:SSH認証

 ここでは「 RSA/DSA 鍵を使う」を選択し、以下のように入力します。

  • ユーザ名(N):ログイン可能なユーザー名
  • パスフレーズ(P):認証用の鍵を作成したときに設定したパスフレーズ
  • 秘密鍵(K):クライアント側へ移した秘密鍵を指定

 入力したら「OK」を押し、ユーザー名、パスフレーズ、秘密鍵、すべて正しければログインできます(下の画像)。

TeraTerm:ログイン成功

 これでコマンド操作が可能になります。

 なお、Vine Linux 4.1 の標準の文字コードはEUCであるのに対し、TeraTerm はデフォルトではUTF-8なので、そのままでは日本語表示が文字化けします。正常に表示させるにはメニューバーの「設定」から「端末」を選択し、漢字-受信(K)、漢字-送信(J)両方ともEUCへ変更してください(下の画像)。

TeraTerm:端末の設定

 接続を終了するときはコマンド logout を使うか、メニューバーの「ファイル」から「接続断」を選択します。

 Windows 機のクライアントは以上のようにして接続しますが、Linux の場合は OpenSSH のクライアント・プログラムを使います。Vine Linux 4.1 ではパッケージ名が openssh-clients 、インストールの種類が "Server" なら初期状態で入っているはずです。

 基本的な使い方は

$ ssh [User]@[IPaddress/Hostname] -p [Port] -i [Keyfile]

で、

  • [User]:ログイン可能なユーザー名
  • [IPaddress/Hostname]:サーバーのIPアドレスまたはホスト名
  • [Port]:SSH サーバーのポート番号
  • [Keyfile]:秘密鍵ファイル

をそれぞれ指定します。具体的には

$ ssh dareka@test -p 49888 -i /home/User-X/id_rsa

というようになります。

openssh-clients:接続失敗

 初めてログインするときは確認のためやはりホスト鍵指紋が表示され(上の画像では一部モザイク)、「接続処理を継続するか?」( Are you sure you want to continue connecting (yes/no)? )と確認を求めてきますので、よければ yes とします。それからパスフレーズの確認があるはずなのですが、上の画像の例では秘密鍵のパーミッションの設定が甘く( 644 )他のユーザーからも読めるようになっていると、警告が出て接続処理が途中終了してしまいます。この場合では、秘密鍵のパーミッションを 600 にすれば接続できるようになります(下の画像)。

openssh-clients:接続成功

 "Enter passphrase for key '[Keyfile]':" というメッセージが出ますのでパスフレーズを入力し、ユーザー名、パスフレーズ、秘密鍵、すべて正しければログインできます。接続を終了するときはコマンド logout を使います。

5.SFTP の利用

 Secure File Transfer Protocol の略で、SSH を応用したファイル転送のプロトコルです。一般によく使われている FTP が通信を平文で行うのに対し、SFTP は暗号化しているのでネット上でより安全性の高いファイル転送を可能にします。

 sshd_config の設定をする際にサブシステムとして指定した sftp は SFTP サーバーで、要求があると設定されたコマンドにより起動されます。

 SFTP サーバーに接続するためには SFTP に対応したクライアント・プログラムが必要です。ここでは例として Windows 機から WinSCP というフリーのクライアント・プログラムを使う方法を以下に説明します。 ダウンロードはこちら。 特に注意を要する点はないと思うので、こちらもインストールの詳細は割愛。やはり基本的にはデフォルトのままで。

グループを選択し、最初は WinSCP ではなく鍵関連ツールのグループ内にある PuTTYgen(下の画像)を起動します。

[スタート]-[プログラム]メニューの WinSCP グループ

 起動できたら "Load an existing private key file" から秘密鍵を読み込みます。この際、パスフレーズを要求されるので入力します(下の画像)。

PuTTYgen:秘密鍵読み込み・パスフレーズ入力

 秘密鍵の読み込みに成功すると、WinSCP で使用可能な形式に変換された秘密鍵が作成されます( WinSCP では OpenSSH で作成した秘密鍵をそのまま使うことができないので、この変換処理が必要になります)。新しい秘密鍵は "Save the generated key" から "Save private key" で適当なファイル名をつけて保存します(下の画像・一部モザイク)。

PuTTYgen:秘密鍵形式変換

 次に WinSCP を起動すると、ログインのために必要な項目を設定する画面が現れます(下の画像)。

WinSCP:ログイン

 ここでは以下のように入力します。

  • ホスト名(H):サーバーのIPアドレスまたはホスト名(ここでは test )
  • ポート番号(R):SSH サーバーのポート番号(ここでは 49888 )
  • ユーザ名(U):ログイン可能なユーザー名
  • 秘密鍵(K):WinSCP 用に形式変換した秘密鍵を指定
  • ファイルプロトコル(F):"SFTP" を選択し、「SCP代替システムを許可」をチェック

 入力したら「ログイン」を押します(ここで場合によっては TeraTerm などでの接続時と同様、警告画面が出てホスト鍵指紋が表示されることがあります)。認証中にパスフレーズを求められるので入力し(下の画像)

WinSCP:パスフレーズ入力

ユーザー名、パスフレーズ、秘密鍵、すべて正しければログインできます(下の画像)。

WinSCP

 使い方は基本的にはファイルまたはディレクトリを選択してウィンドウ下部にあるコマンドパネル(画像赤枠内)のコマンドボタンを押して各種の操作を行います。終了させたい時はやはりコマンドパネルから「終了」のボタンを押します。その他詳細については WinSCP のサイト等を参照してください。

 一方、Linux 機ならコマンドラインからのクライアント・プログラム sftp があります。Vine Linux 4.1 ではインストールの種類が "Server" なら初期状態で入っているはずです。基本的な使い方は

$ sftp -o[Ssh_option] [User]@[IPaddress/Hostname]

で、

  • [User]:ログイン可能なユーザー名
  • [IPaddress/Hostname]:サーバーのIPアドレスまたはホスト名
  • [Ssh_option]:ポート番号、秘密鍵ファイル等を指定する(複数使用可)

をそれぞれ指定します(この他のオプション等詳細については OpenSSH ホームページ のマニュアルを参照してください。)。具体的には

$ sftp -oPort=49888 -oIdentityFile=./id_rsa dareka@test

というようになります。なお、秘密鍵( -oIdentityFile=./id_rsa )は形式変換していないものを使ってください。

sftp

 ssh での接続と同様、初めてログインするときは確認のためやはりホスト鍵指紋が表示され(上の画像では一部モザイク)、「接続処理を継続するか?」( Are you sure you want to continue connecting (yes/no)? )と確認を求めてきますので、よければ yes とします。それからパスフレーズの確認があり、ユーザー名、パスフレーズ、秘密鍵、すべて正しければログインできます。

 ログインしたあと、対話的なコマンドモードに入り、ここでコマンドによりファイル転送等の操作をしていきます。上の画像に使用例があります。その他のコマンドについては OpenSSH ホームページ のマニュアルを参照してください。