さくらのVPS を改めて使いはじめる 1 – 使用準備、SSH 公開鍵認証

2012年4月15日 26 開発 , , , ,

これまで運用してきたブログと趣味の開発用サーバーを、この春はじまった「さくらのVPS 2GB」プランに集約することにしたので、環境構築の手順を記録してゆこうと思う。

なお、ブログは既に移行しており、この記事は新サーバー上で公開している。開発用サーバーについては、Ruby 1.9 系に対応するという Redmine 1.4 待ちだったが、4/14 にリリースされたようなので、これから構築する予定。

基本的な構築の流れは、2 年ほど前に書いたさくらのVPS を使いはじめるシリーズを踏襲するつもり。

ただしデフォルトの OS が CentOS 5.x から 6.2 へ更新されていたり、WordPress なブログを移築するので、内容的に異なる箇所が多くなるかもしれない。

もくじ

さくらのVPS 2GB を契約した動機

これまでブログはさくらのレンタルサーバ スタンダード、開発用サーバーはさくらのVPS 512MB で運用していた。

管理対象となるサーバーが複数あるのは面倒だし、金銭的にもったいないので、前からこれらを VPS 側に集約したいと思っていた。しかし VPS のスペックがいまひとつなのと、ブログで利用してきたドメイン akabeko.sakura.ne.jp を維持できない点などが気になり、二の足を踏み続けてた。

そんなこんなで迎えた 2012 年の春、「さくらのVPS」リニューアルのお知らせが発表された。

新プランの 2GB は、これまで利用してきた環境と比較して総合的にスペックが上である。そのうえ、金額が 1,480 円である。これはちょうど、さくらのレンタルサーバ スタンダード 500 円 と旧さくらの VPS 512MB の 980 円を足した額になる。

まさに移行にうってつけではないか!というわけで、サービス受付初日となる 2012/3/29 に即、契約した。

私が利用しているプランのスペックを比較すると、以下のようになる。さくらのレンタルサーバについては、1 台のサーバーを複数ユーザーが共有するので、実際のスペックは下がるはず。

VPS 2GB VPS 512MB レンタルサーバ スタンダード
初期費用 1,980 円 0 円 1,000 円
月額料金 1,480 円 980 円 500 円
メモリ 2GB 512MB 3.25GB
CPU 仮想 3 コア 仮想 2 コア 2 コア
HDD 200GB 20GB 10 GB

ブログの移転でドメインを維持できなくなる点については、目をつぶることにした。

そもそも akabeko.sakura.ne.jp は、さくらのインターネットの提供するサブドメインなので、固執する意義もすくない。むしろ、このままリンクが集まり続けたら、移行の枷は重くなるばかりである。

というわけで akabeko.sakura.ne.jp はあきらめ、新たに akabeko.me という独自ドメインを取得することにした。

余談だが、私のハンドル名であるアカベコは偶蹄目なので、本当は .mo ドメインにして akabeko.mo にしたかったのだけど、.mo は維持費がけっこう高いため、.me で妥協した。

用意するもの

サーバー上で作業をおこなうため、まずは SSH クライアントを用意する。Windows なら TeraTerm、Mac の場合は標準のターミナルを利用する。

ファイルの送受信については SSH クライアントを利用してもよいのだが、SFTP をサポートした GUI クライアントがあると便利である。Windows は WinSCP、Mac では Cyberduck あたりが定番か。どちらもツリービューをサポートしているので、ファイラーとしても扱いやすい。

WinSCP にはインストーラ版とポータブル版が用意されている。インストーラー版の場合、PuTTYgen という便利ツールも一緒に入れてくれるので、もし選ぶならこちらを強く推奨する。

サーバーの起動とコントロールパネル

VPS を契約すると、「[さくらのVPS] 仮登録完了のお知らせ」というメールが送られてくる。その中には以下のような部分がある。

《VPSコントロールパネル ログイン情報》

VPSコントロールパネルでは、仮想サーバのリセットやリモート
コンソールでの接続、OSの再インストールなどを行うことができます。

URL : https://secure.sakura.ad.jp/vpscontrol/
IPアドレス: XXX.XXX.XXX.XXX
パスワード: XXXXXXXXXXXXXXXXXXXXXXXX

URL は VPS のコントロールパネルにログインするためのページ。アクセスすると IP アドレスとパスワードの入力欄がある。入力してログインするとコントロールパネルに移動するので、「起動」ボタンを押す。

少し待ち、ステータス欄の「更新」ボタンを押すと、欄内の表示が稼働中に変わる。これでサーバーが起動した。サーバーの停止と再起動も、このページからおこなえる。

VPS コントロールパネル

VPS コントロールパネル

コントロールパネルには、他にもリモートコンソールや OS 再インストール機能が用意されている。

リモートコンソールリモートコンソールは JavaScript で作られたブラウザ上のコンソールで、TeraTerm などを用意しなくても、ここからサーバーにログインしてコマンド実行をおこなえる。

リモートコンソール

リモートコンソール

コンソール上部のタイトル右にあるアイコンから、クリップボードの内容も貼り付けられる。応答性もよい。尚、このコンソールは SSH でパスワードによるログインを禁止していても、関係なくログインできるので注意が必要である。

サーバーの設定をいじっている内に不安定になったり、起動不能になったときは OS 再インストール を利用することで、サーバーを初期状態に戻せる。

OS再インストール

OS再インストール

root のパスワードを入力して「確認」ボタンを押すと、再インストールをおこなえる。前に試してみたところ、5 分もかからずに完了した。どのような仕組みになっているのか謎なのだが、root のパスワードを変更していた場合、再インストール後の環境にもそれが引き継がれる。

OS 再インストール画面からカスタム OS インストールを選ぶと、標準の CentOS 以外でセットアップ可能。OS だけで 6 種、さらにバージョンやプラットフォームの違いを含めると 14 種類ものパターンがある。

カスタム OS インストール

カスタム OS インストール

root のパスワード変更とユーザー作成

サーバーを起動できたら、さっそくログインしてみよう。初期状態では root ユーザーだけが存在し、さくらインターネットから送られてきたメールに書かれていた初期パスワードが設定されている。しかしメールにも警告されているよう、これは危険なので真っ先に変更する。

TeraTerm を起動して「新しい接続」ダイアログに IP アドレスを入力し、OK ボタンを押す。次の「SSH 認証」ダイアログではユーザー名に root、パスフレーズへ初期パスワードを入力して OK ボタンを押す。入力内容が適切なら、これでログインがおこなえる。

passwd コマンドを実行すると、新しいパスワードと確認の計 2 回、入力を求められる。成功すると以下のようになる。

# passwd
Changing password for user root.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

私は、以前このブログで紹介したサービスでパスワード生成しているのだが、ここで生成された文字列は入力難度が高いので、クリップボードにコピーして貼り付けている。TeraTerm の貼り付けは Alt + V か、メニューから「編集」→「貼り付け」を選ぶことでおこなる。パスワードは KeePass というツールで管理しており、必要なときだけ取り出すようにしている。

root のパスワードを変更したものの、管理的に考えて、通常の操作は root 以外のユーザーでおこない、必要なときだけ特権を委譲してもらうのが好ましい。

というわけで、次は作業用のユーザーを用意する。useradd コマンドでユーザー作成して、passwd コマンドでパスワードを設定する。成功すると以下のようになる。

# useradd test
# passwd test
Changing password for user test.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

ここで TeraTerm のメニューから「ファイル」→「新しい接続」を選び、いま作成したユーザーでログインできることを確認しておく。

Mac の場合

Mac で SSH 接続する場合は、ターミナル.app を起動し、ssh コマンドを実行する。

$ ssh root@XXX.XXX.XXX.XXX -p 22

@ の前がユーザー名、後の XXX.XXX.XXX.XXX が接続先の IP アドレスとなる。既に IP アドレスと関連づけたドメインがあるなら、それを指定してもよい。

-p パラメータの後に付けた数字は接続するポート番号である。省略した場合は 22 ( SSH のデフォルト ) が選ばれると思われるが、今後、安全のためにポート番号を変える予定なので、このような形で指定できることを覚えておこう。

接続できたら、あとの作業はサーバー上でおこなうので、手順は Windows 一緒になる。

SSH 接続用の鍵を作成する

さきほど root と作業用ユーザーにパスワードを設定したが、これは最低限のセキュリティ対策である。

そもそも、パスワードでログインすることが好ましくない。いくらパスワードを複雑にしても、それが割れたらどこからでもログインされてしまう。

そこで、SSH 接続には公開鍵認証を利用する。

これはサーバーに公開鍵を置き、クライアントはそれに対応した秘密鍵で接続を認証する、というものである。認証に鍵を用いるため、秘密鍵となるファイルにアクセスできる環境からしかログインできない。

鍵を使用するユーザーの限定とパスフレーズ設定により、秘密鍵ファイルが漏洩したときの対策もおこなえる。というわけで、さっそく鍵を作成してみよう。

なお、前に作成したときは PuTTYgen を利用したが、今回は TeraTerm ( Windows )ターミナル ( Mac ) を使用する。

TeraTerm による鍵の生成

TeraTerm を起動すると「新しい接続」ダイアログが表示されるので、キャンセル ボタンを押してダイアログを閉じる。

次にメイン メニューから「設定」→「SSH鍵生成…」を選ぶ。すると以下のダイアログが表示される。生成ボタンを押して、鍵を生成する。

SSH 鍵生成

SSH 鍵生成

鍵が生成されたら、それを保護するためのパスフレーズを設定する。入力欄は設定と確認用のふたつ。ある程度、複雑なパスフレーズを指定すること。

パスフレーズの入力

パスフレーズの入力

パスフレーズを入力したら、「公開鍵の保存」と「秘密鍵の保存」ボタンを押して、鍵ファイルをローカルに保存する。公開鍵は id_rsa.pub、秘密鍵は id_rsa というファイル名にしておく。

Mac の場合

ターミナルを起動して ssh-keygen コマンドを実行する。

$ ssh-keygen

コマンドを実行すると、鍵ファイルの名前とパスフレーズをたずねられる。ファイル名は id_rsa、パスフレーズはある程度、複雑なもの ( 4 文字以下だとエラーになる ) を入力しておく。

生成に成功すると、以下のような出力がおこなわれるはず。

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/XXXXXXXX/.ssh/id_rsa): id_rsa              
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
6a:47:23:9c:e4:33:1f:7d:4b:0f:87:d7:66:8b:68:b1 XXXXXXXX@XXXXXXXX-MacBookAir.local
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|      .          |
|     + . .   . . |
|      B S ..= o +|
|       B o o+*.o.|
|      o o  E.... |
|     . .  .      |
|                 |
+-----------------+

これで /Users/XXXXXXXX/.ssh に 公開鍵 id_rsa.pub と秘密鍵 id_rsa が作成された。秘密鍵のほうは他のユーザーに見られないよう、パーミッションも変更しておく。ターミナルから以下のコマンドを実行する。

$ cd
$ cd .ssh
$ chmod 600 id_rsa

サーバーの SSH 設定を変更

はじめに、公開鍵認証でログインしたいユーザーの HOMEへ、公開鍵ファイルとなる id_rsa.pub を送信する。TeraTerm の場合、サーバーにログインした状態でウィンドウにファイルをドロップすれば、そのユーザーの HOME にコピーされる。

Mac の場合、scp コマンドで転送する。id_rsa.pub が Mac 側のユーザー HOME 以下の .ssh ディレクトリにある場合、実行するコマンドは以下のようになる。

$ cd
$ cd .ssh
$ scp -P 22 id_rsa.pub XXXX@XXX.XXX.XXX.XXX:

-P パラメータでポート番号を指定、@ の前後にユーザー接続先。そのあとに : を付けてサーバー上の転送先ディレクトリを指定する。未指定の場合は HOME に転送される。転送できたらサーバーにログインし、以下のようにコマンドを実行してゆく。

$ cd
$ mkdir .ssh
$ chmod 700 .ssh
$ mv id_rsa.pub .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys

ユーザーの HOME に .ssh ディレクトリを作成し、その中に公開鍵を authorized_keys という名前で配置している。他のユーザーから読み取られないよう、ディレクトリのパーミッションを 700、公開鍵ファイルは 600 としている。これで公開鍵の準備は完了。

次はいよいよ、SSH の設定変更である。

変更には管理者権限が必要なので、su コマンドで root になる。ちなみに通常のユーザーと管理者は、プロンプト先頭の文字で見分けられるようになっている ( シェルによるのかもしれないが )。プロンプトが $ なら通常ユーザー、# は管理者となる。

$ su -
Password:
#

次に /etc/ssh/sshd_config を編集する。vi コマンドで設定ファイルを開く。

# vi /etc/ssh/sshd_config

vi エディタの使い方については、以下のページあたりが参考になる。

ファイルを開いたら、PermitRootLogin ( root のログイン )PasswordAuthentication ( パスワードによるログイン )no に設定する。書式は設定名の後に yes で有効、no で無効、行頭に # でコメントアウトとなる。例えば、以下のように書く。

#PermitRootLogin yes
PermitRootLogin no
 
... 中略 ....
 
#PasswordAuthentication yes
PasswordAuthentication no

編集して保存したら、SSH デーモンを再起動する。

# service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

設定に誤りがあれば、コマンド実行時にエラーメッセージが表示されるので修正する。ここまでの手順がすべて適切ならば、以降はパスワードログインが禁止され、秘密鍵の参照が必須となる。例えば TeraTerm の SSH 認証なら、以下のようになる。

TeraTerm の SSH 公開鍵認証

TeraTerm の SSH 公開鍵認証

コンソールの日本語化

初期設定の一環として、コンソールを日本語化しておく。この設定を格納している /etc/sysconfig/i18n を vi で開く。

$ su -
Password:
# vi /etc/sysconfig/i18n

すると以下のような内容になっているので、

LANG="C"
SYSFONT="latarcyrheb-sun16"

LANG の内容を以下のように編集する。

LANG="ja_JP.UTF-8"
SYSFONT="latarcyrheb-sun16"

編集したら保存して、再ログインするとメッセージが日本語化される。例えば ls -l を実行したときの内容を比べると、初期状態では、

$ ls -l
total 36
-rw-r--r-- 1 root root 33726  9月 15 22:30 httpd.conf

となっているが、日本語化されると以下のように「total」という表記が「合計」に変わる。

$ ls -l
合計 36
-rw-r--r-- 1 root root 33726  9月 15 22:30 httpd.conf

日本語版のマニュアルが用意されているコマンドなら、man コマンドによる表示も日本語化されるので便利だと思う。

システムの更新

今回の仕上げとして、システムの状態を最新へ更新しておく。これはいわば Windows Update のようなもので、定期的に実行することになるだろう。

更新には yum というコマンドを使用する。実行は root になるか sudo を利用する。今はまだ sudo を設定していない ( 次回におこなう予定 ) ので root からおこなう。

yum コマンドを実行すると、はじめにダウンロードするパッケージ一覧とサイズが表示される。ダウンロードの実行を問い合わせられるので、y と入力して Enter。初回なら GPG キーをインポートするという問い合わせがあるので、これも y と答えて Enter を押す。

yum に -y オプションを付けると、問い合わせに y と答えたことにしてスキップできる。N を選ぶことは滅多にないが、キャンセルしたいことがあるかもしれないので、私はスキップさせず、つねに問い合わせを受けるようにしている。

$ su -
Password:
# yum update
 
...
Install       2 Package(s)
Upgrade      16 Package(s)
 
Total download size: 34 M
Is this ok [y/N]: y

しばらく待ってアップデート完了。

…今回はここまで。次回は SSH のポート変更と sudo の指定について書く予定。


TRACKBACKS

COMMENTS

  • 2012年5月6日 10:55 AM 返信

    こんにちは。
    大変わかりやすい記事で非常に重宝しております。ありがとうございます(*^_^*)
    一つ質問があるのですが

    PasswordAuthentication no

    に設定すると
    $ ssh ユーザー名@XXX.XXX.XXX.XXX -p 22
    でログインができなくなりますが、

    Macの場合はターミナルからどうやってログインすれば良いのでしょうか?
    何か鍵へのパスを指定してログインしたりするのですかね?

  • 2012年5月6日 3:19 PM 返信

    Mac の場合、秘密鍵となるファイルを Users/ユーザー名/.ssh の中に保存する必要があります。

    他の環境 ( 別の Mac や Windows など ) で鍵ファイルを作成したなら、それを Mac にコピー、または移動して SSH 接続したい Mac の Users/ユーザー名/.ssh に配置します。

    コメントを読んで気がついたのですが、Mac 側の説明部分の表示がおかしくなっていたので、修正しておきました。

  • tera
    2012年7月31日 12:30 AM 返信

    tera ternで作成した公開鍵をドラッグアンドドロップでアップロードすると
    -bash: ssh-rsa: command not foundのエラーがでて正常にアップロードできません。

    記事に書いている通りやったのですが記事が間違っているのでしょうか?

  • 2012年7月31日 8:01 AM 返信

    tera さん、おはようございます。

    エラーの内容を見るに、以下の問題かもしれません。

    SCPでのエラー「ash: scp: command not found」 – Tera Term(テラターム)の便利な使い方
    http://www.j-oosk.com/teraterm/file-transfer/625/

    私の場合、さくらの VPS(v3) を借りた時点で Tera Term によるドラッグ & ドロップの SCP に成功していた記憶があるのですが、もしそちらで上手く動かない場合は、上記ページにあるように VPS 側へ openssh-clients をインストールしてから再試行してみてください。

    それと Tera Term による、ドラッグ & ドロップ以外のファイル アップロード手順もついでに書いておきます。

    1.Tera Term を起動
    2.サーバーにログイン
    3.Tera Term のメニューから「ファイル」→「SSH SCP」を選択
    4.TTSSH: Secure File Copy ダイアログが表示される
    5.From 欄の右隣にある 「…」ボタンを押す
    6.ファイル ダイアログが表示されるので id_rsa.pub を選択
    7.「開く」ボタンを押してファイル ダイアログを終了
    8.「Send」ボタンを押してファイルのアップロードを開始

    こちらの方法でアップロードした場合でも、ユーザー HOME にファイルが配置されます。

  • 2013年1月23日 8:54 PM 返信

    こんにちは。はじめてお便りを出します。
    さくらのVPSを仮登録したばかりの初心者です。
    このブログを読みながら、TeraTermを使って設定をしているところなのですが、公開鍵認証まではこぎつけたのですが、その次のSSHの設定変更のところで足踏みをしています。

    # vi /etc/ssh/sshd_config
    と打ち込むと、permission deniedが表示されます。
    visudoでALL=( ALL) ALLにしようとしても、
    # visudoを打ち込んだ段階で、やはりpermission deniedが表示されます。

    どこかで変な操作をしてしまったのでしょうか。
    何か対処法があれば教えてください。
    あまりに基本的なことらしく、ネットで探っても答えを得られません。

  • 2013年1月23日 10:32 PM 返信

    プロンプトが # になっているなら root 権限を持っていると考えられます。よって Permission Denied に遭遇することはまずないのですが、念のため、

    ・プロンプトを見て root でログインしていることを確認
    ・ls -l /etc/ssh で表示される一覧をみて、sshd_config などの権限を確認

    を調べてみることをオススメします。また、考えにくいことですが、

    root権限でも『Permission denied』エラー – Linux系OS – 教えて!goo
    http://oshiete.goo.ne.jp/qa/2434782.html

    上記のように chattr コマンドで root 権限を持っていても操作できない属性を設定してしまった可能性もあります。

    なお、この問題を Google 検索するなら linux root permission denied といった感じのキーワードにしてみたり、これにパスやファイル名 ( sshd_config など ) を含めたりすると、目的の情報に近づけるかもしれません。

  • teatime
    2013年5月31日 3:49 PM 返信

    お世話になります。
    今回、さくらVPSを初めて利用することになり、読みやすく整理されたこのページにたどり着きまして、参考にさせていただいてます。
    ちなみに当方はMacユーザーで、ターミナルからの設定を試みています。

    それで、ユーザーの追加までは出来たのですが、
    ━━━━━━━━━━━━━━━━
    Mac の場合
    ターミナルを起動して ssh-keygen コマンドを実行する。
    ━━━━━━━━━━━━━━━━
    のところで、この説明がローカルでの作業だと気付かずに、サーバ上で実行してしまいました。

    なので、現在サーバ上に「ssh」のディレクトリが生成されて公開鍵が保存されてしまったようです。
    これは、そのまま rm で削除しても大丈夫なものでしょうか、、。

    恐れ入りますが、宜しければご教授いただければ幸いです。
    宜しくお願いいたします。

  • 2013年5月31日 11:10 PM 返信

    teatime さん、はじめまして。

    > これは、そのまま rm で削除しても大丈夫なものでしょうか、、。

    とのことですが、作成した鍵を使用していないなら、削除してしまっても大丈夫です。

    なお、秘密鍵を Mac の Users/ユーザー名/.ssh にダウンロード保存して、公開鍵をサーバーに残して利用する方法もありますが、不安であれば、削除してやり直したほうが確実です。

    それとこの記事にも書いたのですが、環境がおかしくなってしまい、どうしても元に戻す方法がわからない場合は、さくらのVPS の管理画面から OS を再インストールすることも可能です ( 環境構築が完全にやり直しとなるため、これは最後の手段ですね )。

  • teatime
    2013年6月1日 12:56 AM 返信

    アカベコさん、丁寧に回答いただき感謝します。

    それを聞いて安心しました。

    そうですね、初期化も簡単に出来ることですし、おっしゃる通り、一旦削除して再生成したいと思います。

    今まで、SSHは多少使う機会はあったのですが、複雑な作業は敬遠していたので、これを機会にトライしてみたいと思います。

    ありがとうございました。

REPLY

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です