このページでは、リモートで動作するFreeBSDサーバにログインして各種コマンドを実行することができるSSHについて、その効能と設定方法について説明します。
SSH (Secure SHell) は、ネットワークを介し、リモートのマシンにログインして各種コマンドを実行したり、FTPのようなファイル送受信を行うための仕組みです。
通信経路上を流れるパケットはSSLで暗号化されるため、インターネット経由でのアクセスでも高いセキュリティを確保することができます。
一方、従来からあるtelnetでは、コマンドやパスワードが平文で送信されるため、盗聴の危険のあるネットワーク経由で利用するのは極めて危険です。
SSHの設定はそれほど難しいものではありませんので、telnetを利用されている方は、これを機にSSHを利用することをお勧めします。
FreeBSDでは、SSHサーバを動作させるためのdaemonである「sshd」がシステムに標準で付属しているため、SSHを導入にするのは非常に簡単です。
まず、「etc/rc.conf」に以下の記述を追加してください。
sshd_enable="YES"
次に、sshdの設定ファイルである「/etc/ssh/sshd_config」を編集します。
Port xxxxx PasswordAuthentication yes PermitRootLogin no PermitEmptyPasswords no
上記の設定は、クライアント側で難しい設定を行わなくても、SSHを利用できる指定です。
「Port xxxxx」は、sshdが利用するポートで、標準では「22」に設定されています。
22番ポートへのアタックは非常に多いため、任意のポートに変更するのが一般的です。
(ポート番号を変更しても、それがセキュリティを決定的に高めることにはなりません、本物のクラッカーはポートスキャンしてSSHが動いているポートを探し出し、そこを突いてきます。)
最後の「PasswordAuthentication yes」は、SSHにおいてパスワードのみでのログインを許容する設定です。
FreeBSDのSSHのデフォルトの設定では、これが「no」になっており、より高いセキュリティが確保できる公開鍵を利用した認証方法を利用するように設定されています。
しかしながら、この公開鍵を利用した認証では、ユーザが公開鍵・秘密鍵のキーペアを生成し、公開鍵をサーバ側に、秘密鍵をクライアント側に、それぞれ設定する作業が必要になります。
「PasswordAuthentication yes」は利用者の利便性を高めるためにセキュリティを犠牲にする設定だと理解してください。
説明しなくてもなんとなくわかりそうなのが、「PermitRootLogin no」と「PermitEmptyPasswords no」で、前者はrootでのログインができないようにする設定、後者は空のパスワードを許容しない設定です。
SSHを動作させるマシンが複数のネットワークに跨っている等、複数のIPアドレスを割り当てられている場合には、特定のIPアドレスでのみSSHを動作させたいケースがあります。
このような場合には、下記のように指定します。
ListenAddress 192.168.16.1
上記のように指定することにより、192.168.16.1のIPアドレスでのみSSHを動作させることが可能です。
上記の設定のみでは、クライアントからの接続時に、パスワードのプロンプトが表示されるまでに1分程度待たされるケースがあります。
これは、デフォルトの設定では、sshdがログインしてきたクライアントのIPアドレスからドメイン名を逆引し、ホスト名が正しく引けるかをチェックするためです。
クライアントのIPアドレスがDNS経由で逆引きできない場合、問い合わせがタイムアウトになるまでsshdが待たされるため、結果としてプロンプトの表示に時間が掛かってしまいます。
この不具合を回避するためには、sshd_configに以下の記述を追記してください。
UseDNS no
以上、設定が完了したら、「/etc/rc.d/sshd start」するか、システムを再起動してsshdを起動させてください。
上記までの設定では、ログイン認証にIDおよびパスワードのみを利用するため、ブルートフォースアタック(ID/パスワードの総当り攻撃)を掛けられた場合、IDおよびパスワードの弱さによっては悪意を持った第三者にログインを許してしまう場合があります。
これを回避するためには、先ほど紹介した公開鍵を利用した認証方法を利用します。
SSHの公開鍵認証方式では、サーバ側に公開鍵を、クライアント側に秘密鍵を配置し、ログインしてきたユーザが「予めサーバ側に配置されている公開鍵と対応する秘密鍵を持っているか否か」によりログイン認証を行います。
SSHの公開鍵認証方式を有効にするには、デフォルトの状態ではコメントアウトされている「/etc/ssh/sshd_config」の以下の記述を有効にします。
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
設定が完了したら、「/etc/rc.d/sshd restart」するか、システムを再起動してsshdを再起動させてください。
続いて、公開鍵認証で利用する公開鍵と秘密鍵のキーペアを作成します。
キーペアについては、クライアント側、サーバ側、またはそれ以外の場所のどこで作っても問題ありませんが、ここではFreeBSDがインストールされているシステム上で作成する方法について説明します。
キーペアを作成するには「ssh-keygen」を利用します。
$ ssh-keygen -t rsa
上記のように入力すると、キーペアの生成場所と、秘密鍵に掛けるパスワードを聞いてきます。
秘密鍵に掛けるパスワードについては、公開鍵認証にてログインする際に入力するパスワードになりますので、忘れないようにしてください。(空白の設定も可能です)
生成場所およびパスワードの設定が完了すると、生成場所に「id_rsa」および「id_rsa.pub」のファイルが出来ているはずです。
前者がクライアント側に配置する秘密鍵、後者がサーバ側に配置する公開鍵になります。
秘密鍵については、漏洩しないようセキュアに保存してください。
次に、生成したキーペアのうち、公開鍵のほうをsshdが動いているサーバに配置します。
上記の「/etc/sshd/sshd_config」の設定により、受け入れる公開鍵として、ユーザのホーム下の「.ssh/authorized_keys」の内容が参照されます。
先ほどの「id_rsa.pub」を、以下のようにして「authorized_keys」の中に流し込んでください。
$ cat id_rsa.pub >> authorized_keys
上記のようにすると、「authorized_keys」が存在しない場合には新規に作成し、既に存在している場合には「id_rsa.pub」の内容を追記します。
最後に、「authorized_keys」のオーナおよびパーミッションを確認してください。
「authorized_keys」のオーナはsshでログインするユーザのものになっている必要があります。
また、パーミッションは「0600」になっている必要がありますので、ご注意ください。(デフォルトのsshd_configでは、パーミッションが0600になっていないと警告を出してログイン認証を失敗させる設定になっています)
sshを利用する全ユーザが公開鍵認証に移行できる場合、パスワードを利用した認証をそのまま有効にしておくことはセキュリティ上のリスクになるため、これを無効にします。
「/etc/ssh/sshd_config」の「PasswordAuthentication」および「ChallengeResponseAuthentication」を以下の通り「no」に設定してください。
PasswordAuthentication no
sshdが動作しているサーバにアクセスするには、SSHに対応したクライアントが必要です。
FreeBSDでは、その名も「ssh」というコマンドで、telnetとほぼ同等の使い勝手でSSHを利用することができます。
$ ssh 192.168.16.1 -p 2222
上記の例では、IPアドレス「192.168.16.1」の「2222」番ポートにSSHで接続します。
また、SFTPを利用する場合には、下記のようにします。
$ sftp -oPort=2222 192.168.16.1
上記の例では、IPアドレス「192.168.16.1」の「2222」番ポートにSFTPで接続します。
Windows上で動作するversion 2プロトコルにSSHクライアントとして有名なのは、「PuTTY」やTeraTermの派生ソフトウェアである「UTF-8 TeraTerm Pro + TTSSH2」などです。
前者はMITライセンス、後者はBSDライセンスで配布されているオープンソースソフトウェアになります。
尚、SSHの公開鍵認証を利用する場合には、クライアント側に秘密鍵を設定する必要があります。
各SSHクライアントにおける秘密鍵の設定方法については、それぞれのマニュアルをご確認ください。
・OSの更新に伴い、設定ファイルの記述内容が変更されていることに対応。
→ 「プロトコルバージョンの設定」の記述を削除。
→ 「ChallengeResponseAuthentication」についての記述を変更。
・「パーミッションが0600になっていると〜」の誤記を修正。
・「ChallengeResponseAuthentication」を「no」に設定しない限り、パスワード認証ができてしまう点について追記。
・システムを再起動する以外に、sshdを起動/再起動する方法を追記。
・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。
まだ評価がありません |
表示できるメッセージはありません。