centosでsshの設定をしよう!

とりきち
サーバーの設定よくわからないっす。とりあえずrootでサーバーいじってるっす
とりふみ
とりあえずずっとrootを使うのやめような

私も初めてサーバーを触り始めたときは、設定とかよくわからないし、root使ってちゃダメなん?と思っていました。そんなエンジニア駆け出しの頃の私と同じように、

  • 初めてサーバー設定をする
  • sshとかユーザーとかよくわかっていない
  • とりあえずrootでアクセスしてる

というような方へsshの基本的な設定方法をお送りします。

SSHの設定の前にSSHについて

とりきち
sshって使ってるけど、実はよくわかってないっす

SSHとはセキュアシェル(Secure Shell)の略です。ネットワークを通じて他のコンピューターやサーバーにアクセスして操作することができます。

Webサーバーなんかは基本SSHでログインして設定するし。WindowsのリモートデスクトップとかでもSSHを使用してアクセスできるみたいですね。

※ こういったイメージです。

初めてエンジニアになった時に、リモートアクセスってなんかドキドキしました。

少し古かったりセキュリティが厳しかったり現場だと、ローカルに開発環境を作らないでサーバーにそれぞれの環境を作ってもらって作業する・・とかそんな懐かしい思い出もあります。

サーバーの設定

早速サーバーの設定に入りたいと思います。

※ ピンクの枠線内のお話です。

インストール状況の確認とインストール

まずは必要なものがインストールされているかを確認します。

yum list installed |grep openssh
openssh.x86_64 7.4p1-16.el7 @base
openssh-clients.x86_64 7.4p1-16.el7 @base
openssh-server.x86_64 7.4p1-16.el7 @base

VPSを借りたり、vagrantだったりすると上記の3つは入っています。もし入っていない場合は以下でインストールします。

yum install -y openssh-server

設定ファイルの確認をする

`sshd_config`が設定ファイルです。`/etc/ssh/`の配下には名前がそっくりな`ssh_config`が存在しますが、こちらはクライアント側のシステム全体に設定ファイルですので、間違わないように気をつけましょう。(中身見ればわかるか)

次に`Port` `PermitRootLogin` `PasswordAuthentication`の3つを設定します。それぞれの設定値の意味は以下になります。

  • Port – 接続のポートです。デフォルトでは22なので、必要がなれけば22で問題ありません。
  • PermitRootLogin – こちらはRootでのアクセスを制御します。今回はrootのログインを禁止するのでnoを指定します。
  • PasswordAuthentication – パスワードでの認証の許可・不許可の制御をします。今回はyesを選択します。

rootのsshを禁止する理由はこちら

rootでsshを禁止しよう。sshできる状態はとても危険

2018.05.23
...

#Port 22
# ↓ コメントアウト
Port 22
#AddressFamily any
ListenAddress 0.0.0.0
#ListenAddress ::

# The default requires explicit activation of protocol 1
#Protocol 2

...

# Authentication:

#LoginGraceTime 2m
# ↓ yes
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

...

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
# ↓ yes
PasswordAuthentication yes

上記の設定だと、sshの22番ポートに対してroot以外のユーザーはパスワード認証ができる という状態になりました。

さらにユーザーを制御する

さらにsshでログインできるユーザーを制御することが可能です。

  • DenyUsers – こちらに該当するユーザーはアクセスすることができません。
  • AllowUsers – こちらに該当するユーザーのみがログインすることが可能です。

上記を設定してみます。

DenyUsers hoge fuga

上記はユーザーhogeとユーザーfugaがアクセスすることができません

AllowUsers sage

上記の設定だとユーザーsageのみがログインすることが可能です。

再起動して設定を反映させる

$ systemctl restart sshd

クライアントからアクセスする

最後にサーバーに接続してみます。

※ ピンクの枠線内のお話です。

※ 下記の{SERVER_IP_ADDRESS}にはサーバー

ssh sage@{SERVER_IP_ADDRESS}
sage@{SERVER_IP_ADDRESS}'s password:<パスワード入力!>

こちらでアクセスできれば完了です。

もしくはすでにドメインを割り振っていいれば、ドメインを指定してログインすることでも可能です。

ssh sage@hogefugasage.com
sage@hogefugasage.com's password: <パスワード入力!>