読者の悩み
こういった疑問に答えます。
本記事の内容
この記事を書いている僕は、フロントエンドエンジニア歴が15年ほど。
web業界からゲーム業界まで数多くのwebサイトやアプリケーションを制作しています。
こういった僕が、分かりやすく解説していきます。
SSHでサーバーに接続する際には「認証」を行う必要があります。
誰でも簡単にサーバーにリモート接続出来てしまっては、セキュリティ的に問題があるため限られた管理者だけがアクセス出来るよう認証が行われる訳ですね。
認証方式には2種類あります。
パスワード認証方式
パスワード認証方式は、ユーザー名とパスワードをあらかじめ決めておき、サーバーに接続する際にこれらを使ってログインする方式です。
パスワード認証は一般的に馴染み深く簡単な方法なのですが、管理者が単純なパスワードを設定してしまったり、他のサイトと同じパスワードを使い回してしまったりして、万が一パスワードが知られてしまうと不正にログインされてしまう危険性があります。
公開鍵認証方式
公開鍵認証方式では、2つの鍵を使って認証を行います。
1つは「秘密鍵」、もう1つは「公開鍵」と呼ばれるものです。「鍵」と呼んでいますが、実態はコンピューター上のデータです。
秘密鍵は「電子署名」というデータを「作る」ことが出来ます。
公開鍵はその署名データが正しいかどうか「検証する」ことが出来ます。
まず、秘密鍵は自分のパソコンの中に大切に保管しておきます。
※万が一、この鍵が奪われてしまうとサーバーに不正アクセスされる危険性があります。 そして、公開鍵のほうはサーバーの中に保管しておきます。
これで準備完了です。
実際に認証を行う際は、以下のような流れになります。
といった流れです。
この「鍵」を使って作成した電子署名データはとても複雑なデータとなっているため、パスワードのように簡単に推測されたりする危険性は低くなります。
そのため秘密鍵さえしっかり管理しておけば他から不正アクセスされる危険性は低く、パスワード認証方式よりも安全な認証方式となっています。
SSHで接続する際は、パスワード認証方式よりも安全な「公開鍵認証方式」を使うようにしましょう。
生成する方法は2種類あります。
Xserver(エックスサーバー)のサーバーパネルを利用する方法はこの後に解説していますので、ターミナルを利用する方法を解説します。
.sshディレクトリに移動
まずは、下記のコマンドを実行して鍵を入れるフォルダに移動します。
$cd ~/.ssh
「cd」は階層移動するコマンドです
もし、"/.ssh: No such file or directory`gem install hoge"と怒られたら.sshディレクトリがないので作成してください。
次のコマンドでフォルダを作成します。
$mkdir ~/.ssh
「mkdir」はフォルダを作成するコマンドです。
フォルダが作成できたか確認するコマンドは以下になります。
$pwd
「pwd」コマンドは、現在の作業ディレクトリを表示するコマンドです。
lsコマンドでこのディレクトリに何もないことを確認
$ls
「ls」はファイルを一覧表示する他、ファイルの詳細情報を表示する際にも使えるコマンドです。
鍵の生成
次に以下のコマンドで鍵を生成します。
$ssh-keygen -t rsa
実行すると以下の3つのことを聞かれます。
すべて Enterを押しても構いません。
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(ここはユーザーの名前が入ります)/.ssh/id_rsa): <----- ここで鍵ファイルを保存するフォルダの名前を設定できます
Enter passphrase (empty for no passphrase): <----- パスフレーズ Enter same passphrase again: <----- パスフレーズ(確認用)
Your identification has been saved in /Users/(ここはユーザーの名前が入ります)/.ssh/id_rsa.
Your public key has been saved in /Users/(ここはユーザーの名前が入ります)/.ssh/id_rsa.pub.
The key fingerprint is: 99:24:u0:8i:2d:34:e6:82:r5:89:41:p8:a7:58:1p:n2(ここにメールアドレスが入ります).local
The key's randomart image is:
+---[RSA 2048]----+
| . =+.+. |
| . + .+ |
| . . .. . |
| o + o o + . |
|o . o o.SB ..+ |
|.. .+ +oo+o |
|o . . ..*=.o. |
|.o . ..E+.o+|
|. .+=o+|
+-----------------+
この後に下記のコマンドを入力して~/.sshの中身をみてください。
$ls
すると次のような2つのファイルが作成されているのが確認できます。(先程、名前を設定していればそれが表示されます)
id_rsa
id_rsa.pub
id_rsaファイルが秘密鍵ファイルです。 id_rsa.pubファイルが公開鍵ファイルです。
生成した公開鍵の内容は次のコマンドで確認できます。
cat ~/.ssh/id_rsa.pub
エックスサーバーでSSHを使う際に「Permission denied」が出てうまく接続できない時があったので、解決した方法をまとめています。
SSH設定をオンにする
根本的な部分ですが、見落としやすいので必ずチェックしましょう。
エックスサーバーのサーバーパネル上でSSH設定がONになっているかどうかを確認します。
マニュアル:「ONにする」を選択し、「設定する」ボタンをクリック
「公開鍵認証用鍵ペアの生成」を再度設定する
公開鍵を再設定します。パスフレーズを設定しファイルをダウンロードします。(****.keyというファイルがDLできます)
マニュアル:サーバー上で公開鍵認証用鍵ペアの生成を行う場合
ただし、ほかにも使っている方がいる場合は公開鍵自体には問題がないので、正しいファイルを受け取り再配置だけしましょう。
「公開鍵登録・更新」を設定
自分で作成した公開鍵を登録する場合や複数の公開鍵を登録したい場合は、「公開鍵登録・更新」をクリックします。
公開鍵登録・更新画面が表示されましたら「公開鍵」欄にお手持ちの公開鍵を入力し、「確認画面へ進む」ボタンをクリックします。
確認画面が表示されますので「登録する」ボタンをクリックします。
「公開鍵の登録を完了しました。」と表示されましたら、登録完了です。
マニュアル:お客さまにて作成の公開鍵を登録する場合
公開鍵にスペースが入っていないかをチェック
「公開鍵登録・更新」画面より公開鍵にスペースが入っていないかを確認しましょう。
気付かない間にスペースが入っていることがあり、それのせいでうまく接続できないケースがありますので注意しましょう。
先ほどDLしたファイルを.sshディレクトリに配置します。
.sshディレクトリがない場合はコマンドで作成します。
$mkdir ~/.ssh
.sshディレクトリの権限
home/ユーザ/.sshディレクトリの権限を確認します。下記のコマンドで.sshディレクトリの権限を確認できます。
$ ls -al ~/
.sshディレクトリは権限が700になっている必要があります。実行した結果、ファイルのリストが表示されます。.sshディレクトリに関する情報が、下記のようになってれば大丈夫です。
drwx------ 27 xxx staff 864 12 20 10:43 .ssh
もし、下記のように違っている場合は、chmodコマンドを使って権限を変更する必要があります。
drwxr--r-- 27 xxx staff 864 12 20 10:43 .ssh
こんな風になっていたり、
drwxr-xr-x 27 xxx staff 864 12 20 10:43 .ssh
下記のコマンドを実行すると権限を変更できます。
$ chmod 700 ~/.ssh/
秘密鍵の権限
.sshディレクトリと同様に秘密鍵の権限が正しく設定されていない場合も、「Permission denied」となります。秘密鍵の権限確認方法は下記のコマンドを実行すると確認できます。
$ ls -al ~/.ssh/id_rsa
※id_rsaが秘密鍵のファイルです。ファイル名を変更している場合は変更したファイル名を指定してコマンドを実行してください。
秘密鍵の権限が600か400になっている必要があります。下記のように600になっているか、
-rw------- 1 xxx staff 1823 12 6 18:15 /Users/xxx/.ssh/id_rsa
下記のように400になっていれば大丈夫です。
-r-------- 1 xxx staff 1823 12 6 18:15 /Users/xxx/.ssh/id_rsa
もしなっていない場合は、下記のコマンドで権限を変更てください。
$ chmod 600 ~/.ssh/id_rsa
400にしたい場合は下記のようになります。
$ chmod 400 ~/.ssh/id_rsa
権限を600にするか400にするかはどちらでも構いません。600の場合はファイルの所有者に読み取り、書き込み権限が付きます。400にした場合は読み取り権限のみが付きます。
authorized_keysの権限
接続先のauthorized_keysファイルの権限について600になっている必要があります。 ローカル側の確認方法と同様に、下記のコマンドを実行して権限が600、もしくは400になっているか確認してください。
$ ls -al ~/.ssh/authorized_keys
600、もしくは、400になっていない場合は、下記のコマンドで権限を変更してください。
# 600 にしたい場合
$ chmod 600 ~/.ssh/authorized_keys
# 400 にしたい場合
$ chmod 400 ~/.ssh/authorized_keys
僕もここで権限を変更してうまくできました。
SSHアカウント情報 | |
---|---|
サーバー(ホスト名) |
サーバーID.xsrv.jp(お客様の初期ドメイン) ※ホスト名(sv***.xserver.jp)でも設定が可能です。 例:xsample.xsrv.jp |
ユーザー名 |
サーバーID 例:xsample |
認証方式 |
公開鍵認証 ※パスワード認証は利用できません。 |
接続ポート | 10022 |
10022番ポートを必ず指定する
エックスサーバーは10022ポートを使います。通常の22ポートではないので指定が必須になります。
ssh サーバーID@ホスト名(sv****.xserver.j@) -i id_xserver_rsa -p 10022
ユーザーIDは正しいか?
サーバーIDとサーバー番号を確認しましょう。僕は[sv****]がサーバーIDとばかり思ってました。
しかし、SSHアカウント情報にある「サーバID」というのはサーバ番号のことではありません。
サーバーパネルのトップを表示した際に、左上の「アカウントデータ」下にある「サーバID」を指しています。
また、サーバー(ホスト名)の書き方は以下の2つがあるので、こちらも注意が必要です。
Macの場合は、ターミナルで以下のどちらかでコマンドを打つと接続ができます。
ssh -i ~/.ssh/id_rsa(Mac内の鍵の場所)サーバID@サーバID.xsrv.jp(サーバーID@サーバID.xsrv.jp) -p 10022
ssh -i ~/.ssh/id_rsa(Mac内の鍵の場所)サーバID@sv****.xserver.jp(サーバーID@ホスト名) -p 10022
ここまでを再確認すれば、エックスサーバーのSSH接続においては解決できるケースがほとんどだと思います。
今回は以上になります。
SSHの設定方法や接続方法が不安な方は是非参考にしていただけると嬉しいです。