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)


関連ページ