SSHの設定方法
SSH(Secure SHell)について
SSHとは
SSHとは、クライアント(ローカルマシン)から遠隔地のサーバ(リモートマシン)に接続(ログイン)して、サーバ操作やコマンド実行などを行うことができるプログラムです。SSHでは通信内容は暗号化され、通信内容を盗み見られても問題ないため、インターネット経由の接続などに用いられます。
SSHでは、リモートログイン以外に以下の機能が利用できます。
- ファイル転送機能
- SSHを利用した安全なファイル転送として、「SCP (Secure Copy)」コマンドと「sftp (Secure-FTP)」コマンドがあります。
- Xフォワーディング
- Xフォワーディングとは、X Window SystemのパケットをSSHの安全な経路を通して送信する機能です。リモートマシンのXアプリケーションをローカル側で操作することができます。
- TCP/IPポートフォワーディング
- X Window System以外のポートをSSH経由で転送(SSHのトンネルを利用)することも可能です。
SSHの使い方
SSHでサーバに接続(ログイン)するコマンドの形式は以下の通りです。
接続するユーザ名と接続するサーバ(ホスト)名を指定します。
$ ssh username@hostname
SSHサーバ設定
SSH設定ファイル
SSHでは「sshd_config」という設定ファイルを編集する事により、アクセス制限や認証方法を変更する事ができます。
- Linuxなどの場合:/etc/ssh/sshd_config
- HP-UX (IPF)の場合:/opt/ssh/etc/sshd_config
行頭の「#」は、その行がコメントアウトされている事を表します。
インストール時からコメントアウトされている設定は、すべてデフォルトの設定値であり、「何も記述しなかった場合の設定値」です。
客先に納品するような本番環境では、念のため明示的に指定した方がよいといえます。
sshd_configで頻繁に設定する項目は以下の通りです。
項目 | 意味 |
---|---|
PermitRootLogin | root のログイン制限(default:no)。デフォルトでrootがSSHでログインできる状態であり非常に危険なので、yesに設定すべきです。 |
PubkeyAuthentication | 公開鍵認証の許可(default:yes)。 |
AuthorizedKeysFile | 認証に使われる公開鍵のファイル(default:.ssh/authorized_keys)。デフォルトではユーザホームディレクトリ配下の「.ssh」に鍵を格納します。 |
PasswordAuthentication | パスワード認証を許可(default:yes)。 パスワード認証を拒否したい場合には、noに設定します。 |
MaxStartups | クライアントの接続可能数を「開始時:確立割合:最大数」のコロン区切りの形式で指定します。例えば、「2:70:5」と記述すると2つまでの接続要求を受け付け、これを超えると70%の確率で接続要求を拒否し、5つを超えるとすべて拒否するようになります。 |
SSHサーバ(SSHデーモン)の起動と停止
SSHのデーモンは「sshd」です。
sshdを起動するには下記コマンドを実行します。
# service sshd start
sshdを停止するには下記コマンドを実行します。
# service sshd stop
sshdを再起動するには下記コマンドを実行します。
# service sshd restart
設定ファイルを更新後、設定をsshdに反映させるには下記コマンドを実行します。
# service sshd reload
SSH 自動ログイン設定(パスワード入力せずに接続する)
sshでは、証明書を使ってリモートホストにログインすることが可能です。
パスフレーズを設定しない証明書を用意することで、パスワードを入力せずにログインできるようになります。
1. 自分の端末(クライアント)側で、秘密鍵と公開鍵を作成する。
ホームディレクトリに「.ssh」というディレクトリを作成します。
$ cd
$ mkdir .ssh
$ chmod 700 .ssh
公開鍵(.ssh/id_rsa)と秘密鍵(.ssh/id_rsa.pub)を作成します。
パスフレーズの入力で何も入力しなければ、パスワードなしログインができるようになります。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user01/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user01/.ssh/id_rsa.
Your public key has been saved in /home/user01/.ssh/id_rsa.pub.
The key fingerprint is:
9e:1d:dc:5a:04:be:4d:ef:38:f4:a0:64:b8:df:2f:52 user01@host
2. クライアントで作成した公開鍵をサーバに送信する。
scpコマンドで公開鍵「id_rsa.pub」ファイルをサーバに送信します。
ssh接続するユーザのホームディレクトリに送信します。
$ scp .ssh/id_rsa.pub user@server:
3. サーバに公開鍵をセットする
サーバ側ユーザのホームディレクトリにも「.ssh」ディレクトリを作成します。
$ cd
$ mkdir .ssh
$ chmod 700 .ssh
公開鍵(id_dsa.pub)の内容を「authorized_keys」ファイルに加えます。
$ cat id_rsa.pub >> .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys
$ rm id_rsa.pub
4. サーバ側で証明書を用いたログインを許可する。
サーバ側で、証明書でのログインを許す設定をSSH設定ファイル「/etc/ssh/sshd_config」に加えます。デフォルトではコメントアウトされており、許可する設定となっていますが、念のため明示的に指定します。(編集はroot権限が必要です。)
# vi /etc/ssh/sshd_config
...
PubkeyAuthentication yes
...
設定を反映させるために、sshを再起動します。
# service sshd restart
以上で設定は完了します。
接続できない場合にはパーミッションの設定ミスが多いです。
- クライアント側の .ssh/id_rsa のパーミッション (600)
- サーバー側のホームディレクトリのパーミッション (755)
- サーバー側の .ssh ディレクトリのパーミッション (700)
- サーバー側の .ssh/authorized_keys のパーミッション (600)