VPS(Vultr)でSSH接続をする手順。VPS立ち上げからfirewall設定まで

VPSでSSH接続を行えるようにする手順を紹介していく。

今回は、

  • VPSを立ち上げる
  • rootユーザーでSSH接続する
  • セキュリティ対策でアクセス制限を行う
  • firewallの設定
  • ローカル(自分のパソコン)から1コマンドでSSH接続できるようにする

と言うところまで行う。

開発環境

  • Mac 10.14.6 (ローカル)
  • CentOS7 64bit(VPS)

今回は海外サーバーの「Vultr」を使っているが、別にさくらでもConohaでも同じようにできる。

VPSとはすでに契約済みでServerの立ち上げを済ませておいて、「今からSSH接続をやる」と言う状態から説明していく。また、今回の説明では、自分のパソコン上での作業は「ローカル」、VPSサーバー上での作業は「サーバー」と表記する。

1, rootユーザーでSSH接続

まずはVPSサーバーに入って作業を行うために、rootユーザーでSSH接続を行う。

rootユーザーのIDやpasswordはVPSの設定画面に載っていることが多いので、VPSの設定画面に入ってIDとパスワードを確認しよう。(IDはrootになっていると思う)

それと、VPSサーバーのIPアドレスも設定画面でチェックする。

確認したら、ローカル上のターミナルで以下のコマンドを実行。

ssh root@IP_address

IP_addressの所には先ほど確認したIPアドレスを入れる。例えば、199.32.33.2のIPアドレスであればssh root@199.32.33.2とすれば良い。

コマンド実行後はパスワードを聞かれるので、これも先ほど確認したパスワードを入力する。

上手くいけばサーバーにアクセスできる。

2,ユーザーを作成する

現在のサーバー上のユーザーはrootユーザーのみだと思う。しかし、rootユーザーでサーバーをいじるのはセキュリティ上の観点から望ましくないので、「新たにユーザーを作成して、そのユーザーにroot権限を持たせる」と言う風にする。

そのためにも、以下のコマンドでユーザーを作成する。

useradd foo

fooのところには、好きなユーザー名を入力する。そして、

passwd foo

上記のように入力して、先程作成したユーザーのパスワードを作成する。

作成したユーザーでSSH接続できるか確認するためと今後の作業のために、exitでサーバーから離脱した後に、ssh foo@IP_addressとしてSSH接続をしてみよう。

3,公開鍵,秘密鍵を作成してSSHを楽にする

次に公開鍵、秘密鍵を作成して、SSH接続を簡単に行えるようにする。この設定を行うことで、現在はわざわざssh foo@IP_addressと入力しているが、ssh vultrのように簡単にSSH接続ができるようになるし、セキュリティ的にも良い。

公開鍵、秘密鍵を作るためには、ローカル上で以下のコマンドを実行。

cd ~/.ssh
ssh-keygen -t rsa

ssh-keygen -t rsaは公開鍵、秘密鍵を作るためのコマンドで、以下のように文章が続く。

ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Enter file in which to save the key (/Users/(username)/.ssh/id_rsa)では、僕はvultr_idと入力して、passphraseの部分は何も入力しなかった。これで公開鍵と秘密鍵が作成されているはず。(lsで確認しよう)

lsコマンドで確認してみると、

  • vultr_id
  • vultr_id.pub

の2種類のファイルが作成されている。vultr_idはローカルで使う秘密鍵で、vultr_id.pubはサーバーで使う公開鍵となる。

vultr_id.pubをサーバーにコピーするために、ローカル上で以下のコマンドを実行。

pbcopy < ~/.ssh/vultr_id.pub

pbcopyを使うことでファイル全体をコピーすることができる。(Macでやった)

そして、現在のサーバーでは新規ユーザーでログインしていると思うので、サーバー上で以下のコマンドを実行。

cd
mkdir .ssh
chmod 700 .ssh/
vi .ssh/authorized_keys
chmod 600 .ssh/authorized_keys

肝心なのが、

  • rootユーザーではないユーザーのhomeディレクトリにいること
  • .sshディレクトリを作ること。(.sshの先頭には「ドット」がついている」
  • .sshディレクトリ内にauthorized_keysファイルを作成して、そのauthorized_keysに公開鍵をコピーすること
  • ファイルのパーミッションを設定する

サーバーのデフォルトの設定では、公開鍵を使ったSSH接続の時には.ssh/authorized_keysの内容をチェックすることになっているので、.sshディレクトリを作成した上でauthorized_keysファイルを作る必要がある。

そしてauthorized_keysにローカル上で作った公開鍵(vultr_id.pub)をコピーする。

ここまで来たらローカルに戻って、.sshディレクトリ内にconfigファイルを作成して、configファイルを以下のように編集する。(configに.txtのような拡張子は不要)

Host vultr
HostName 143.54.34.3  #サーバーのIPアドレス
Port 22  #とりあえず22に設定。あとで変更する
User foo #サーバーのユーザー名
IdentityFile ~/.ssh/vultr_id
ServerAliveInterval 180

ここまで来たら、以下のコマンドを実行するだけで、サーバーにログインできるようになる。

ssh vultr

4,セキュリティを高める設定を行う。

上記の設定でもVPSを使えるようになったが、セキュリティ的には甘い設定になっている。例えば、

  • rootユーザーでログインできる
  • 公開鍵だけでなく、パスワードからでもログインできる
  • Portがデフォルトの22のまま

これらを設定するためにも、ssh vultrのコマンドを実行して、サーバーに入って以下のコマンドを実行する。

sudo vi /etc/ssh/sshd_config

そして、該当する部分を以下のように変更する。(上が変更前、下が変更後)

#PermitRootLogin yes
PermitRootLogin no 
#PasswordAuthentication yes
PasswordAuthentication no 
#Port 22
Port 10022

Portは1024から65535の番号であれば、自由に決めて良い。例として、今回はPort 10022と設定した。

ここまで設定したら、以下のコマンドで設定を反映させる。

sudo systemctl restart sshd

次に、firewallの設定を行う。firewallとは、linuxで標準で付いているプログラムで、悪意のあるアクセスなどを防いでくれてセキュリティを守ってくれるソフト。

以下のコマンドでfirewallの設定ファイルを開く。

sudo vi /usr/lib/firewalld/services/ssh.xml
<?xml version="1.0" encoding="utf-8"?><service>
<short>SSH</short>
<description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
<port protocol="tcp" port="22"/>
</service>

<port protocol="tcp" port="22"/>の22のところを先程設定したPort番号に変える。今回の例でいうと、<port protocol="tcp" port="10022"/>とする。

firewallの設定が終われば、以下のコマンドで設定を反映させる。

sudo firewall-cmd --reload

ここまで来たら、あとはローカルに戻って.ssh/configファイルを以下のように書き換える。書き換える部分は、Port 22 の部分でここをPort 10022と変える。

Host vultr
HostName 143.54.34.3  #サーバーのIPアドレス
Port 10022  #とりあえず22に設定。あとで変更する
User foo #サーバーのユーザー名
IdentityFile ~/.ssh/vultr_id
ServerAliveInterval 180

最終確認として、ssh vultrをして接続できたら成功。念のために、rootユーザーでアクセスできないこと、パスワード入力でもアクセスできないことを確認しておこう。

参考記事

以下は、今回の作業でお世話になったサイトの紹介。

チュートリアル:CentOS 7(さくらのVPS)サーバ作成直後に設定しておくべき初期セキュリティ設定 – さくらのVPSニュース

GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~ – Qiita

SSHでPermission denied (publickey,gssapi-keyex,gssapi-with-mic)の対処法 · DQNEO起業日記

ssh接続でPermission deniedと表示されたときの対処法

SSH Permission denied on Correct Password Authentication – Super User

ReratedPosts

VPSのSSH接続時に「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 」のエラーが出た時の対処法