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ユーザーでアクセスできないこと、パスワード入力でもアクセスできないことを確認しておこう。
参考記事
以下は、今回の作業でお世話になったサイトの紹介。
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