環境
Ubuntu 16.04.5 LTS
内容
クライアントからサーバーにSSHで接続するは、クライアント側にSSHツールがインストールされている必要があります。SSHツールには色々と種類があるが、デファクトスタンダードとなっているのがOpenSSHです。
OpenSSHがインストールされているか確認するコマンドがssh -Vです。OpenSSHには、クライアントツールであるopenssh-clientsと、サーバーサイドツールであるopenssh-serverの2種類あります。どちらか片方でもインストールされていれば、ssh -Vコマンドでインストール済と表示されます。どちらか片方がインストールされていても、両方がインストールされていても同じ返答を返すため、どちらのツールがインストールされているかまでは、このコマンドだけでは判断ができません。
Ubuntuにはデフォルトで、openssh-clientsはインストールされているが、openssh-serverはインストールされていないため、openssh-serverを使う場合は、ssh -Vコマンドだけでは、インストールの有無を判断することはできないことになります。
openssh-serverがインストールされているかを確認するには2つの方法があります。/etc/ssh/sshd_configの中身を参照して、PermitRootLoginの行が存在するかを確認する方法と、service --status-allコマンドで、sshdサービスがインストールされているかを確認する方法の2つです。
/etc/ssh/sshd_configは、openssh-clientsをインストールすれば自動で生成されるため、ファイルの存在だけを確認するのではなく、PermitRootLogin行の有無まで、しっかり確認することが重要です。
openssh-serverがインストールされていなければ、sudo apt install openssh-serverでインストールします。openssh-serverをインストールした後、sudo /etc/init.d/ssh startコマンドで、SSHサービスを起動して、service --status-allコマンドで、[ + ] sshと表示されれば、SSHサービスは正しく起動されています。
openssh-serverを使う場合は、セキュリティ上、/etc/ssh/sshd_configをデフォルトで使ってはいけません。/etc/ssh/sshd_configを開いて、PermitRootLogin行を、prohibit-password ⇒ noに修正して、ルート権限でSSH接続ができないようにします。
また、SSHのポート番号がデフォルトで22になっているため、22以外の番号に変更する必要があります。well-known以外であれば何番に設定してもかまいません。この2つの設定は、セキュリティホールを生まないように、必ず設定してください。
ポート番号を変更した場合、クライアントから接続する際には、sshコマンドでpオプションをつけて、変更したポート番号を指定して接続することになります。
/etc/ssh/sshd_configを変更した後、ファイルに誤りがないかを確認するツール、
sshd -tがあるので必ず実行します。ファイルに誤りがあれば、エディタで修正してください。
SSHでクライアントからサーバーに接続するときに、ユーザー認証とホスト認証の2種類の認証が行われます。ユーザー認証とは、ユーザーIDとパスワードを使って行われる認証で、ホスト認証とは、ホスト名(またはIPアドレス)で行われる認証のことです。2つの認証が共に成功して、はじめてSSHのセッション確立されます。
認証で必要な情報を、クライアントからサーバーに送る際は、平文で送られるのではなく暗号化して送られます。SSHは以前使われていた、telnetやftpより堅牢になっています。
SSHは公開暗号鍵方式(鍵交換認証ともいう)という方法を使って情報送っています。送信元で暗号化した平文を、送信先で復号化して安全に平文を取り出すための仕組みです。
暗号化のときに利用する鍵を生成するアルゴリズムには、RSA、DSAなど色々なアルゴリズムが存在するが、一般的にはRSAがよく使われます。RSAのアルゴリズムを使って鍵を生成するにはssh-keygen -t rsaコマンドを使います。
作られた鍵はどこのディレクトリで保管しても基本的に自由ですが、ホームディレクトリ配下の**.sshディレクトリに保管するのが基本です。.sshディレクトリにはセキュリティ上、重要な鍵を保存するため、パーミッションの設定も重要です。パーミッションは、chmod 600 ~/.sshで600**(もしくは700)に設定して、自分以外のユーザーが参照、変更ができないようにします。
ssh-keygen -t rsaコマンドでは、id_rsa(秘密鍵)とid_rsa.pub(公開鍵)の2つの鍵が生成されます。公開鍵を接続先のサーバーにscpコマンドなどを使ってセットします。秘密鍵はローカルで管理します。クライアント側の秘密鍵を使って暗号化した平文は、サーバー側で公開鍵を使って復号化される仕組みになります。
SSHにはSSH1とSSH2の2つのバージョンが存在します。SSH2を使って接続する場合は、sshコマンドで、ssh -2とオプションをつけます。