key-authentication

Conoha VPS + kusanagiで鍵認証を使ったSSH&SFTP接続に変更させる

ConohaVPS + kusanagiのセキュリティ対策第3弾。

1年半ほどSSH接続する時にはパスワードログイン(root接続)を行っていたんですが、日に1万以上を超える攻撃を受けるようになったので、最近になって鍵認証に変更しました。

 

ってわけで、今回はConohaVPS + kusanagiでの必須セキュリティ対策、鍵認証を行ったSSH&SFTP接続について簡単な流れをご紹介。

  • 脆弱性のあるパスワードログインから鍵認証へ
  • VPS初心者でも簡単
  • 基本的にはコピペでOK

なお、以下を前提に話を進めるのでご注意を。

前提条件

  • Mac、Conoha&kusanagiユーザー
  • wheelユーザーを新規追加し、rootログインは禁止済み
  • 事前にport番号を変更済
  • 例であげるユーザー名、生成する鍵の名前は「tomato」
  • FTP(FileZilla)で接続設定を終えている

port番号を変更していない場合は下記記事をご参照ください。

ちなみに、筆者の使用環境はMacbookAir2013(mojave)
SSH接続にはMac標準のターミナル、FTP接続にはFileZillaを使用しています。

Windowsを使用している場合は操作が異なる場面があるので、自分に必要な部分だけ参考にしてください。

鍵をローカル環境で生成する

key-authentication

まずは、サーバーと自分のPCを繋ぐ鍵を作っていきましょう。

SSH接続した後にサーバー内で作ることも可能ですが、自分のPC内で作った方が分かり易いので、今回はローカルで作っていきます。

ターミナルで鍵生成

ターミナルを開き、以下のコマンドを打ちます。

 

cd desktop

 

ssh-keygen -t rsa

一言解説

  • cd : 作業ディレクトリを移動する
  • ssh-keygen -t rsaで公開鍵(.pub)と秘密鍵を生成

以上のコマンドを打つと、

Enter file in which to save the key (/Users/PCユーザー名/.ssh/id_rsa):tomato

と鍵の名前を決められます。

そのままEnterを押すとid_rsaで固定されますが、今回は例として『tomato』という鍵を精製していきます。

ssh-keygen

また、上記画像のように

Enter passphrase (empty for no passphrase):〇〇

と2度パスワードを聞かれます。

無視してもいいみたいですが、入力するのがベターらしいので好きなパスワードを入れておきましょう。スルーしてEnterキーを2度押すと、接続時にパスワードを求められなくなります。

 

操作を終えたら、デスクトップ画面に公開鍵(.pub)と秘密鍵が生成されているのを確認しましょう。

秘密鍵をpem形式に

筆者の環境ではなぜかpem形式ではなく、ただの書類として生成されていたため、pem形式に変更します。

最初からpem形式で保存されていた場合はスルーしてください。

 

方法は新しく生成された秘密鍵(.pubじゃない方)をリネームし、『.pem』を付け足してやるだけ。

「名前の末尾に拡張子”.pem”を追加してもよろしいですか?」と聞いてくるので、追加を選択。

 

筆者の場合、秘密鍵は『tomato』なので『tomato.pem』に変更します。

秘密鍵を.sshファイルへ移動させる

作成した秘密鍵(tomato.pem)をユーザー直下の.sshディレクトリへ移動させます。

.sshディレクトリはユーザー直下にあるファイルですが、不可視ファイルなため、通常では見ることができません。

ショートカットキー「command + shift + .(ドット)」をFinderで開いた後に実行し、不可視ファイルを見れるように変更します。

 

隠しファイルが見れるようになったら、ユーザー名直下の「.sshディレクトリ」内に作成させた秘密鍵(tomato.pem)をドラッグ&ドロップし移動させます。

 

また、そもそも.sshディレクトリが無い場合は、新しく作る必要があります。
下記コマンドで新規作成した後に、秘密鍵を移動しましょう。

 

mkdir .ssh

SFTPで公開鍵をサーバーへ

次に、SFTP接続を行い公開鍵(tomato.pub)をサーバーへ移動させます。

ターミナルを利用して送ることも可能みたいですが、VPS童貞の僕には難易度が高かったため、SFTP(FileZilla)を利用して送り込みます。

 

まずはFileZillaを起動し、接続。

filezilla-config

設定は僕の場合上記画像のようになってます。

 

/home/ユーザー名(筆者の場合tomato)と進み、前々回に作った.sshディレクトリを開きます。

見当たらない方は下記記事を参照してください。

.sshディレクトリ内にローカル環境で作成した公開鍵(tomato.pub)をドラッグ&ドロップ。次へ進みます。

SSHで公開鍵を「authorized_keys」に

再びターミナルを開き、今度はSSH接続を行います。

ユーザー名とipアドレス部分、ポート番号はそれぞれ自分のものに書き換えてください

 

ssh tomato@133.130.120.164 -p 29870

 

rootでログインした場合、下記コードでユーザーを変更します。

 

su - tomato

 

ローカル環境から移したtomato.pubのままでは『ドアノブ』の役目を果たさないので、「authorized_keys」という名前に下記コマンドで変更します。

 

mv ./.ssh/tomato.pub ./.ssh/authorized_keys

一言解説

  • mv : ファイルやディレクトリを移動する/名前を変更する
      ※上記の場合 .sshファイルのtomato.pubをauthorized_keysへ変更

  • [tomato@ipアドレス ~]$ となっている状態で打たないとmvコマンドは上手く作動してくれません。su – ユーザー名と入力し、rootユーザーではない状態で進めてください。

これで下準備は完了です!

パーミッション、ファイル名が正しいか確認

念のために、パーミッション、ファイル名等が正しいか確認しましょう。

 

ls -la /home/tomato/.ssh

 

ssh-authorized-keys

正しく行われていればこんな感じ。

sshd設定ファイルをいじり、パスワードログインを無効化

ここまで来れば、あと少し!

sshd_configというファイルを編集し、パスワードログインを無効化して鍵認証になるように設定します。

念のためにバックアップを取る

sshd_configは非常に繊細な子なので、後で困らないようにバックアップファイルを作っておきます。

SSHでユーザーログインをした後、下記のコードを打ち込みます。

 

sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.old

一言解説

  • cp : ファイルやディレクトリを複製する
      ※上記の場合 sshd_configをsshd_config.oldとして複製

  • sudo : 管理者権限で処理を実行

パスワードを入力し、複製を完了します。

sshd_config.oldは、元のsshd_configと同じファイル内にあるので、鍵認証が上手く行かず入れなかった場合などは、conohaのコンソールから.oldを取って復元しましょう。

sshd_configの設定を変える

sshd_configファイルをいじっていきます。

vimエディタという特殊なテキストエディタを使うため苦労しますが、頑張りましょう。

SSHでユーザーログイン後、下記のコードを打ち込みます。

 

sudo vim /etc/ssh/sshd_config

 

特に設定をいじっていない場合、153行の頭が痛くなるような羅列が現れます。

vimエディタは、このままでは挿入画面にならないので、PCのキーボードの『a』キーを押し、挿入モードに切り替えます。

 

挿入モードに切り替えた後、下記の行の文字列を書き換えます。

 

23行目にある

#Protocol 2

Protocol 2

に。#を取るだけです。

 

55行目にある

#PubkeyAuthentication yes

PubkeyAuthentication yes

に書き換え。#を取るだけです。

 

79行目にある

PasswordAuthentication yes

PasswordAuthentication no

に書き換え。

環境によってはなぜか2つPasswordAuthenticationがあります。その場合は両方とも『no』に変えましょう。

 

書き換えが完了したら『ESC』キーを押し、挿入モードを終了させます。

:wq』と入力し、vimエディタを上書き保存して終了します。

vim簡単解説

  • aキー : 挿入モードに切り替え
  • ESCキー:挿入モード終了
  • uキー:一つ前の処理に戻す
  • :wq:上書き保存する

最後に、下記コマンドでsshdの再起動をはかります。

 

systemctl restart sshd.service

 

これでSSH接続、FTP接続は鍵認証に変更され、以降ではパスワードログインが出来なくなります!

鍵認証でSSH接続、SFTP接続してみる

最後に、鍵認証で実際に入れるかどうか確認してみましょう。

鍵認証でSSH接続

今後SSH接続を行う場合は、下記のようなコマンドで接続を行います。

 

ssh -i ~/.ssh/tomato.pem tomato@133.130.120.164 -p 29870

一言解説

-i : 秘密鍵の場所を指定するオプション

パスワードを聞かれた場合は、鍵を生成した時に入力したパスワードを記入します。何も入力しなかった場合、特にパスワードの入力は必要ありません!

 

無事接続できたら鍵認証完了です!
予期せぬ事態で秘密鍵を無くしてしまうと怖いので、USBにでもコピーしてバックアップを取っておきましょう。

 

WARNING: UNPROTECTED PRIVATE KEY FILE!

と警告文が出て入れなかった場合は、pemファイルのパーミッションを疑いましょう。

 

ローカル環境のターミナルで、下記コマンドを打ちパーミッションを変更します。

 

chmod 700 /Users/PCユーザー名/.ssh/tomato.pem

 

これでも入れなかった場合は……前の段階から処理を間違えている可能性があります。やり直しましょう。

鍵認証でFileZillaを動かす

パスワードログインを禁止した事で、FileZillaなどのFTPソフトも普段通りのやり方では使えなくなります。

以下の様に鍵認証設定に変えましょう。

FileZilla設定

  • ログオンタイプ:鍵認証
  • 鍵ファイル:/Users/PCユーザー名/.ssh/tomato.pem

接続を行おうとすると、「.pem形式をサポートしていません」と怒られる場合があります。

素直に『はい』を選択し、FileZillaが理解できる形式へと変更しましょう。

filezilla-2

鍵のパスワードを入力したら、保存先を選択します。.sshディレクトリが理想ですが、不可視ファイルなためそのままでは保存する事ができません。『Command + Shift + .』のショートカットキーを入力し、不可視ファイルを見れるようにした後、.sshファイル内に『tomato』と名付けて保存しておきます。

よく分からない方は一度デスクトップに保存し、後から.sshディレクトリ内に入れてもOKです。

 

一連の流れで保存されたFileZilla用の秘密鍵は、『tomato.ppk』として保存されます。

なので、最終的な接続画面はこんな感じ。

 

以上、おわりっ!

最後に

意味が分からない、という理由でパスワードログインのまま放置していた筆者ですが、そのまま放置していたらいつかは突破される可能性があります。

なんせ1日1万回を超える攻撃ですからね……。

鍵認証に変えただけでも、割とほっとしています。

 

ここまで来ればConoha + kusanagiの最低限のセキュリティ対策は後少し!

次はファイアーウォールの導入方法をご紹介します。

 

関連記事