サーバーリテラシ2005 - 第4回 SSH サーバーの構築

pori
リモートログイン
ターゲットコンピュータに直接ログインせずとも安全にインターネット経由でリモートログインできるようSSHサーバをインストールします。SSHサーバを利用することで、自宅などからそのコンピュータにアクセスすることが可能となるため大変便利です。またSSHの認証は公開鍵方式で行われ、通信経路も暗号化されるため現時点で非常に安全な通信手段だと言えます。SSHが登場する以前はリモートログインする手段として、平文(非暗号化通信)で通信するtelnetと呼ばれるものがありましたが、SSHがある現在では利用する機会は激減しています。

構築手順


SSHサーバ

OpenSSH

CentOSには最初からOpenSSHと呼ばれるSSH用サーバ・クライアントプログラムのパッケージが含まれています。OpenSSHのサーバプログラムはsshdです。

SSHサーバ側の設定

SSHサーバがインストールされているかの確認

[hoge@localhost hoge]# rpm -qa | grep ssh

openssh-server-3.9p1-8.RHEL4.9
openssh-3.9p1-8.RHEL4.9
openssh-askpass-gnome-3.9p1-8.RHEL4.9
openssh-clients-3.9p1-8.RHEL4.9
openssh-askpass-3.9p1-8.RHEL4.9

SSHサーバのインストール先の確認

[hoge@localhost hoge]$ rpm -ql openssh-server
/etc/pam.d/sshd
/etc/rc.d/init.d/sshd
/etc/ssh
/etc/ssh/sshd_config
/usr/libexec/openssh/sftp-server
/usr/sbin/sshd
/usr/share/man/man5/sshd_config.5.gz
/usr/share/man/man8/sftp-server.8.gz
/usr/share/man/man8/sshd.8.gz
/var/empty/sshd

このパッケージに含まれているsshdの設定ファイルは/etc/ssh/sshd_c onfigです。

SSHサーバの起動確認

sshデーモンが動いているかどうか確認します。

[hoge@localhost hoge]$ ps aux | grep sshd
pori     14795  0.1  0.4  7844 2284 ?        S    15:04   0:06 sshd: pori@pts/2

デーモンが動いてない人は起動スクリプトから起動しましょう。

SSHサーバ起動スクリプトの使い方

[root@localhost root]$ /etc/init.d/sshd

使い方: /etc/init.d/sshd {start|stop|restart|reload|condrestart|status}

動かない人は/var/log/messageのエラーログメッセージを参考にして対処してください。

リモートアクセス確認

PuTTY

PuTTYはWindows用のsshクライアントプログラムです。

ノートPCを使って各自のサーバマシンのSSHサーバにアクセスしてみます。

同じローカルネットワーク内なので、踏み台サーバの経由はせずにダイレクトにアクセスします。

カテゴリ 設定項目
セッション ホスト名 192.168.10.1xx(『xx』にはマシン番号が入ります)
ポート 22
プロトコル SSH
変換 受信されるデータの文字セット変換 UTF-8(CJK)
接続 自動ログインのユーザ名 自分で作った一般ユーザ名

以上の設定ができたら、一度セッションに戻って、保存してください。

新たに作ったセッションをダブルクリックして接続します。

秘密鍵の生成

puttygenを起動して秘密鍵保存します。

参考

SSH/SCPの使い方 -> 鍵の生成
http://rat.cis.k.hosei.ac.jp/article/rat/ssh.html.ja#na-1

公開鍵

次に公開鍵を登録するのでWebサーバで公開します。
パスワード認証でログインした自分のサーバにコピーアンドペーストで貼り付けます。

cd /usr/local/httpd/htdocs/
vi public_key.txt

公開鍵をアップロードできたら、次へ進みます。

クライアント側の設定

外から直接アクセスすることはできないので、踏み台サーバ(step.cis.k.hosei.ac.jp)を経由してアクセスします。

リテラシ環境では以下のようなポートフォワードを行います。

ポートフォワード:localhost:10022 -> 踏み台サーバ -> 自分のサーバマシン:22
ポートフォワーディング
ローカルコンピュータの特定のポートに送られてきたデータを、別に用意した通信経路を用いてリモートコンピュータの特定ポートに送信することです。通信経路を暗号化してセキュリティを高める用途に用いられることが多いため、ほとんどの場合はSSH等の暗号化技術が併用されます。
ポートフォワーディングのメリット
LAN内などのローカルネットワークからの接続しか許可していないサーバに対して、いったん目的のサーバと同じネットワークにあるコンピュータにログインし、内部ネットワークからの通信としてサーバに接続を要求するという形を取れます。目的のサーバが外部ネットワークからの接続を認めている場合も、相手ネットワークまでの通信経路を暗号化することで安全性の高い通信が可能になります。
なぜ踏み台サーバを使うのか
個々のマシンにグローバルIPアドレスを割り振るほどIPアドレスが無く、そのような環境にでも外部から接続できるようにするためです。また踏み台サーバを経由しない限り外部から各自のサーバマシンに直接接続できないことによる、安全な演習環境を実現するためです。

踏み台マシンへログインする

踏み台マシンにログインするためのPuTTYの設定を行います。
今回は個人ごとのユーザを作成せず、サーバリテラシ用にメンバで同じユーザ:hogeを使用します。

カテゴリ 設定項目
セッション ホスト名 133.25.236.120
ポート 22
プロトコル SSH
変換 受信されるデータの文字セット変換 UTF-8(CJK)
接続 自動ログインのユーザ名 hoge
接続-SSH-認証 認証のためのプライベートキーファイル 自分の秘密鍵を指定してください
接続-SSH-トンネル 源ポート 10022
送り先 [192.168.10.1xx]:22

※送り先、のチェックはローカルです。

※トンネルの部分は値を入れたら追加ボタンを押してください。

以上の設定ができたら、一度セッションに戻って、保存してください。

新たに作った踏み台へのセッションをダブルクリックして接続します。

各自のサーバマシンへログインする

上記のPuTTYのアクセスで次のような接続が可能となります。

ノートPC(localhost):10022 -> 踏み台サーバ -> 自分のサーバマシン:22

ポートフォワードをしているので、接続先のホスト名はlocalhostでポート番号は設定した10022になります。
新しくPuTTYを起動してください。

カテゴリ 設定項目
セッション ホスト名 localhost
ポート 10022
プロトコル SSH
変換 受信されるデータの文字セット変換 UTF-8(CJK)
接続 自動ログインのユーザ名 自分で作った一般ユーザ名

以上の設定ができたら、一度セッションに戻って、保存してください。

この時点でPuTTYは、「踏み台サーバ」と「各自のサーバマシン」の2つの接続を行っています。踏み台サーバのPuTTYを終了すると各自のサーバマシンへの接続は切断されてしまいますので注意してください。

各自のサーバマシンへログインできたら

各自のサーバマシンの一般ユーザに公開鍵を登録します

[hoge@localhost hoge]$ mkdir ~/.ssh
[hoge@localhost hoge]$ vi ~/.ssh/authorized_keys

i 』を押して、viを『インサートモード』にします。公開鍵をコピーし、vi上でマウスの右クリックで貼り付けます。
このとき、インサートモードで貼り付けが行われていないと、正しく公開鍵が貼り付けられません。貼り付けた鍵の先頭が『ssh…』で始まっていることを確認してください。
※ 『 ~ 』はユーザのホームディレクトリを指します。

.sshフォルダには公開鍵以外にも利用方法によっては重要なファイルが配置されるため、パーミッションのチェックが厳しいです。次のように所有者以外のユーザアクセスができないようにしないと公開鍵認証方式でのログインが拒絶されます。

[hoge@localhost hoge]$ chmod 700 ~/.ssh
[hoge@localhost hoge]$ chmod 600 ~/.ssh/authorized_keys

SSHサーバの設定変更

安全にsshdを運用できるように設定を変更する必要があります。設定ファイルで『 # 』を先頭につけるとコメントアウトすることができます。コメントアウトされている設定はデフォルトの設定です。

デフォルトではrootのログイン等を許可しているので、設定を変更する必要があります。
デフォルトのSSHサーバの設定は、以下の点でセキュリティ上問題があるので変更してください。

設定説明問題点
PermitRootLoginyes/norootでのログインを許可するかどうか直接rootユーザのパスワードを解析される可能性がある
PasswordAuthenticationyes/noパスワードログインを許可許可した場合、公開鍵を使用しなくてもログインできる
ChallengeResponseAuthenticationyes/noチャレンジ・レスポンス認証を許可推奨されていない

sshdデーモンの設定ファイルは/etc/ssh/sshd_configです。設定を編集する前にバックアップを取っておいてください。

[root@localhost root]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.default
[root@localhost root]# vi /etc/ssh/sshd_config

次の様に変更します。

PermitRootLogin no
PasswordAuthentication no
ChallengeResponseAuthentication no

SSHサーバ再起動

変更した設定を反映するにはsshdデーモンを再起動する必要があります。

[root@localhost root]# /etc/init.d/sshd restart

公開鍵認証方式で自分のサーバマシンへログイン

公開鍵の登録に失敗している可能性もあるので、現在のターミナル(PuTTYのウインドウ)を閉じないでおいて、新しくPuTTYのウインドウを開きましょう。

上での設定に加えて、秘密鍵の指定を追加したセッションを作る。

カテゴリ 設定項目
セッション ホスト名 localhost
ポート 10022
プロトコル SSH
変換 受信されるデータの文字セット変換 UTF-8(CJK)
接続 自動ログインのユーザ名 自分で作った一般ユーザ名
接続-SSH-認証 認証のためのプライベートキーファイル 自分の秘密鍵を指定してください

以上の設定ができたら、一度セッションに戻って、保存してください。

公開鍵認証方式でのログインが成功した場合は、次のように出力されます。

login as: user1
Authenticating with public key "user1@localhost"
Passphrase for key "user1@localhost":

user1はログインする一般ユーザ名。