ConoHaサーバ構築(SSHログイン編)備忘録


サーバ情報

■ 契約プラン
- リージョン:東京
- メモリ:1GB
- CPU:2コア
- SSD:100GB

■ OS情報

$ cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)

■ CPU情報

$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 79
model name      : Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz
stepping        : 1
microcode       : 0x1
cpu MHz         : 2397.222
cache size      : 4096 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs taa itlb_multihit
bogomips        : 4794.44
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 79
model name      : Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz
stepping        : 1
microcode       : 0x1
cpu MHz         : 2397.222
cache size      : 4096 KB
physical id     : 1
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs taa itlb_multihit
bogomips        : 4794.44
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

■ メモリ情報

$ cat /proc/meminfo
MemTotal:         841024 kB
MemFree:          221220 kB
MemAvailable:     543912 kB
Buffers:          104976 kB
Cached:           325808 kB
SwapCached:            0 kB
Active:           331072 kB
Inactive:         186516 kB
Active(anon):      87972 kB
Inactive(anon):    15072 kB
Active(file):     243100 kB
Inactive(file):   171444 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         86856 kB
Mapped:            81360 kB
Shmem:             16244 kB
KReclaimable:      43428 kB
Slab:              74596 kB
SReclaimable:      43428 kB
SUnreclaim:        31168 kB
KernelStack:        1760 kB
PageTables:         7276 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     2517660 kB
Committed_AS:     356324 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
HardwareCorrupted:     0 kB
AnonHugePages:     10240 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
DirectMap4k:       90104 kB
DirectMap2M:      958464 kB
DirectMap1G:           0 kB

■ ストレージ情報

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        396M     0  396M   0% /dev
tmpfs           411M     0  411M   0% /dev/shm
tmpfs           411M   16M  395M   4% /run
tmpfs           411M     0  411M   0% /sys/fs/cgroup
/dev/vda2        50G  3.8G   44G   8% /
tmpfs            83M     0   83M   0% /run/user/0
tmpfs            83M     0   83M   0% /run/user/1000

サーバ構築

【STEP1】一般ユーザの作成

ユーザを作成

$ useradd [ユーザ名]

作成したユーザのパスワードを変更

$ passwd [ユーザ名]

スーパーユーザ権限でコマンドを実行できるように変更

$ gpasswd -a [ユーザ名] wheel

ちょっと疑問に思ったこと・・・
リンク:なぜ、Wheelグループと呼ばれるのか?

$ su [ユーザ名]

【STEP2】SSH ログイン環境の整備

SSHの設定ファイルを編集する前にバックアップ

$ cd /etc/ssh
$ cp -pi sshd_config sshd_config.org

Rootログインを禁止する

$ vi sshd_config
---------------
PermitRootLogin yes -> no
---------------

SSHのポート番号を変更する
※ ここでは例として10099を設定する

$ vi sshd_config
---------------
Port 22 -> 10099
---------------

ウェルノウンポートを設定しないように注意!
リンク:ウェルノウンポート

パスワード無しログインを禁止する

$ vi sshd_config
---------------
PermitEmptyPasswords yes -> no
---------------

特定のユーザのみ、SSHでログイン可能とする

$ vi sshd_config
---------------
# 1ユーザだけ許可する場合
AllowUsers [ユーザ名]

# 複数のユーザを許可する場合
AllowUsers [ユーザ名1] [ユーザ名2] [ユーザ名3]
---------------

設定ファイルの構文チェックを実施する
※ 何も表示されなければ、問題なし。

$ sshd -t

sshdサービスを再起動して、設定を反映させる

$ systemctl restart sshd.service

SSHの設定反映は完了したが、ファイアウォールで22番ポートを未許可に変更し、10099番ポートを許可へ変更する必要がある。

まずは、ファイアウォールのステータスを確認する

$ systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor p>
   Active: active (running) since Wed 2020-04-08 17:48:55 JST; 39min ago
     Docs: man:firewalld(1)
 Main PID: 701 (firewalld)
    Tasks: 2 (limit: 5056)
   Memory: 30.6M
   CGroup: /system.slice/firewalld.service
           mq701 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork ->

active (running) なので、ファイアウォールが動作している。

ファイアウォールの設定を確認する

$ firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

ssh(22番ポート)が許可状態にあるため、22番ポートを許可対象から除外する

# 恒久的にsshを許可対象から除外する
$ firewall-cmd --permanent --remove-service=ssh

# ファイアウォールの設定を反映する
$ firewall-cmd --reload

ssh(22番ポート)が未許可状態になったことを確認する

$ firewall-cmd --reloadlist-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: cockpit dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

servicesの項目からsshが除外されていれば、設定反映は成功。

次に、ポート番号10099を許可対象として追加する

# ポート番号10099を許可対象として追加する
$ firewall-cmd --zone=public --add-port=10099/tcp --permanent

# ファイアウォールの設定を反映する
$ firewall-cmd --reload

ssh(10099番ポート)が許可状態になったことを確認する

$ firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client
  ports: 10099/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

portsの項目に10099/tcpが追加されていれば、設定反映は成功。

SSH,ファイアウォールの設定反映が完了したため、以下のことを確認する

  • RootユーザでSSHできないこと
  • 一般ユーザでSSHできること
  • ポート番号22でSSHできないこと
  • ポート番号10099でSSHできること
  • 未許可ユーザではSSHできないこと
  • 許可ユーザではSSHできること

上記の結果がOKであれば、SSHの設定はひとまず完了。

【STEP3】SSH 鍵認証ログインの設定

公開鍵配置用のディレクトリを作成する

# 鍵認証ログインさせたい一般ユーザでホームディレクトリへ移動
$ cd ~

# 公開鍵配置用のディレクトリを作成
$ mkdir .ssh

# 所有者のみ公開鍵へのアクセスを許可する
$ chmod 700 .ssh

一旦、ローカル側の作業に移動する。
以下、公開鍵と秘密鍵を生成方法を説明する。

teratermを起動し、新しい接続が表示されたら[キャンセル]する

上段メニューの[設定]を選択する

[SSH鍵生成]を選択すると、鍵生成画面が表示される

[生成]を押下し、パスフレーズを入力する。
その後、[公開鍵の保存]と[秘密鍵の保存]を選択して、ローカルに公開鍵と秘密鍵を保存する。

ここでサーバ側の作業に戻る。
鍵認証ログインさせたい一般ユーザのホームディレクトリへ移動する

$ cd ~

teratermに対して、先ほど生成した公開鍵をドラッグ&ドロップする

[SCP]を選択すると、一般ユーザのホームディレクトリに公開鍵が配置される

$ ls
id_rsa.pub

公開鍵をauthorized_keysへ結合する

# 公開鍵をauthorized_keysへ結合する
$ cat id_rsa.pub >> ~/.ssh/authorized_keys

# 不要となった公開鍵は削除する
$ rm id_rsa.pub

# authorized_keysのパーミッションを600で制限する
$ chmod 600 authorized_keys

公開鍵の配置が完了したので、teraterm等のSSHクライアントを使用して、秘密鍵を使用した接続ができるか確認してみる。

ログインに成功すれば、ひとまず鍵認証ログインは成功であるが、まだ通常のパスワードログインが可能であるため、SSHの設定を変更する。

パスワード認証によるログインを禁止する

# SSHの設定ファイルがあるディレクトリへ移動する
$ cd /etc/ssh

# 設定変更前にSSHの設定ファイルをバックアップする
$ cp -pi sshd_config sshd_config.YYYYMMDDHHMM

# パスワード認証を禁止するように、設定を修正する
$ vi sshd_config
---------------
PasswordAuthentication yes -> no
---------------

# 構文チェックを実施する
$ sshd -t

# sshdサービスを再起動して、設定を反映する
$ systemctl restart sshd.service

設定反映が完了したので、パスワード認証ログインができず、鍵認証のみでログインができればOKである。

Teraterm から自動ログインするマクロ

auto_login.ttl
;=====================================================================
; 接続情報
HOSTADDR = 'ホストアドレス'
USERNAME = 'ユーザ名'
PASSWORD = 'パスフレーズ'
KEYFILE  = '秘密鍵のフルパス'
;=====================================================================

; 処理ディレクトリを現在ディレクトリに変更
getdir DIR
setdir DIR

; コマンドオプション組立て
COMMAND = HOSTADDR
strconcat COMMAND ':[ポート番号] /ssh /2 /auth=publickey /user='
strconcat COMMAND USERNAME
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD
strconcat COMMAND ' /keyfile='
strconcat COMMAND KEYFILE

; 接続
connect COMMAND

end