Ubuntu 12.04 サーバー構築2 ( openssh-server )

Ubuntuサーバー上にopenssh-serverのインストール、公開鍵の作成、sshクライアントの設定に関するメモ

OpenSSHとは

通信データを暗号化してリモートアクセス内容を傍受されにくくするためのプロトコル。
サーバーにはsshdデーモンを常駐させて、クライアントからssh(Secure Shell)で通信できるようにするための設定を行う。また公開鍵認証を行う為の設定も追記。

openssh-serverのインストール

$ sudo apt-get install openssh-server

インストールが完了すると、/etc/sshディレクトリ以下にサーバ用設定ファイルsshd_configやその他多数ファイルが出力される。デフォルトのポートは22番だが、セキュリティ上攻撃されやすいので別のポート番号に変更しておく。なおhttpsはApache側の設定でポートもデフォルト443番で独立しているので関係なし。

sshd_config

Port 2222
Protocol 2                  (プロトコルSSH2)
PermitRootLogin no          (Rootのログインを拒否)
PasswordAuthentication no   (Linuxでのパスワード認証を拒否)
X11Forwarding no            (X11転送を拒否する)
RSAAuthentication yes       (RSA暗号方式を許可)
PubkeyAuthentication yes    (公開鍵認証を許可)
AuthorizedKeysFile .ssh/authorized_keys (認証する鍵のリスト)

sshのインストール

サーバにSSHログインするクライアント端末でインストールしておく。

> sudo apt-get install ssh

秘密鍵と公開鍵の作成

ssh-keygenコマンドでRSA方式の鍵を作成する。コマンドを実行すると、秘密鍵と公開鍵のペアが作成される。イメージ的には鍵(秘密鍵)と南京錠(公開鍵)のペアといった感じ。秘密鍵は拡張子なしで公開鍵の拡張子は.pubになる。またkey名を省略するとid_rsaという名称になる。

これらの鍵をクライアント、サーバ、まったく別のPCで作成しても問題なし。
重要なのは、

  • 同一端末およびコマンドで作成したペアであること。
  • 秘密鍵id_rsaはクライアント、公開鍵id_rsa.pubはサーバーで使われること
> ssh-keygen -t rsa [key name]
> ls id_rsa*
id_rsa id_rsa.pub

公開鍵をサーバに登録する

なんらかの方法で公開鍵id_rsa.pubをサーバに提供した後、sshログイン認証する為に公開鍵をauthorized_keysファイルに登録する。

登録するauthorized_keysファイルは、sshログインユーザのホームディレクトリにある.sshディレクトリ直下に作成する。またこのauthorized_keysには複数の鍵を登録することができるので下記のように追記する。

また注意点として、authorized_keysのパーミッションは本人以外が参照できるようになっていると、エラーになるので、パーミッションを0600にしておく。

> cat id_rsa.pub >> ~/.ssh/authorized_keys 
> sudo chmod 0600 ~/.ssh/authorized_keys

SSHクライアントの設定

sshログインする際、sshコマンドの引数パラメータで、接続先情報などを指定することも可能だが、~/.ssh/config設定ファイルに一元管理する方法が良い。また、以下のように複数の接続先を定義することも可能である。

host (識別子)
    user (SSH接続したときのサーバー側のログインユーザ名)
    hostname (サーバ名orIPアドレス)
    port (SSHポート)
    identityfile (認証に使用するクライアントの秘密鍵のパス)
host server1
    user hoge
    hostname 192.168.0.10
    port 2222
    identityfile ~/.ssh/id_rsa

host server2
    user fuga
    hostname 192.168.0.20
    port 1122
    identityfile ~/.ssh/id_rsa2

SSHログイン

.ssh/configファイルに設定した識別子を引数にして、sshコマンドを実行して、無事サーバーにログインできることを確認する

> ssh server1

その他 (SSHポートフォワード)

SSHトンネルSSH転送という表記もある。ローカルとサーバの任意のポートを指定してSSH暗号化接続を確立した後、暗号化非対応の通信プロトコルをくぐらせて暗号化する仕組み。リモートデスクトップ接続するときにVNCクライアントを使用するが、VNC自体が暗号化非対応なので、SSHポートフォワードを使う。

> ssh -L (ローカルポート):(ローカルホスト):(リモートポート) (ログインユーザ)@(サーバ)
  • クライアントの1000番ポートとserverの5600番ポートをログインユーザuserで接続してSSH転送する場合は、以下で接続した状態でローカルホストの1000番に対して通信処理を行うと、転送される。
> ssh -L 1000:127.0.0.1:5600 user@server