2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ConoHa VPS のSSH接続設定をしよう!

Last updated at Posted at 2024-12-18

まえがき

この記事について

この記事は、ConoHa VPS でSSH接続の初期設定を行った際のメモです。

きっかけ

外出先でふと時間が空いて何か開発しようと持ったとき、手持ちのMacbookAirのスペックが、家に置いてあるMac miniよりも低くて、動作が重いのが課題でした。
レンタルサーバーを借りてそこで開発すれば、PCのスペックによらず、家でも外出先でも同じ環境で開発ができて便利だと思い、設定をしてみました。

VPSサーバーを作成する

ConoHaへのアカウント作成は済んでいるものとします。
ログインするとこのような画面になっているはずです。

左のタブから「サーバー追加」を選択します。

00_ConoHa_ログイン後のトップ画面.png

サーバー追加画面はこのようになっています。

01_ConoHa_サーバー追加画面-2.png

右側にある月額の合計金額が、選択した項目に応じて変化します。
今回、以下の設定で作成しました。

サービス:VPS
イメージタイプ:OS (CentOS)
料金タイプ:1ヶ月
プラン:2GB
rootパスワード:こちらは任意の値を入力します。root権限でSSH接続する際のパスワードとして使用します。
ネームタグ:用途に応じて好みの名前をつけます。後で変更も可能です。

rootパスワードは忘れるとSSH接続できなくなるので、必ずどこかにメモしておきます

料金を確認して、問題なければ「次へ」を押します。

02_ConoHa_サーバー追加画面_料金確認-2.png

お支払い画面に遷移します。
支払い方法を選択して、「決済」を押します。

しばらく待つと、サーバーが立ち上がります。ステータスが「起動中」になっていればOKです。

03_ConoHa_サーバー作成後_サーバー一覧-2.png

初期設定を行う

あとはSSH接続して開発していけばいいのですが、
やっておいた方がいい初期設定があるので実施しておきます。

ログイン

まずはログインします。
先ほどのサーバーリストのページのネームタグをクリックすると、サーバーの詳細ページに入れます

「コンソール」ボタンがあるので、これをクリックするとコンソールが開きます。
04_ConoHa_サーバー詳細画面-2.png

コンソール画面の「コンソール」タブから「シリアル」を選択すると、見た目がちょっと良くなります。

05_ConoHa_コンソール_シリアル-2.png

この画面で以下を入力することで、root権限でサーバーに接続できます。
login:root
Password:サーバー作成時に指定したrootパスワードの値

vm-bae22ffe-00 login: root
Password:
Last login: Tue Dec 17 23:30:00 on tty1
[root@vm-bae22ffe-00 ~]#

なお、ターミナルを閉じる前にはlogoutコマンドでログアウトしてから閉じるようにします。

パッケージのアップデート

パッケージをアップデートし、最新の状態にします。
結構時間がかかるので、気長に待ちます。

# sudo yum update -y

もう一度同じコマンドを実行して、以下のように Complete! が表示されればアップデートが完了しています。

> Last metadata expiration check: 0:12:56 ago on Wed 17 Jul 2024 08:29:32 AM JST.
> Dependencies resolved.
> Nothing to do.
> Complete!

ユーザー作成

rootユーザーを常用すると権限が強すぎて危険なので、別のユーザーを作成し、そちらを使用することにします。
ユーザー名はadminにしましたが、なんでも大丈夫です。

# adduser admin

パスワードを設定します。

# passwd admin
> Changing password for user admin.
> New password:
> Retype new password:
> passwd: all authentication tokens updated successfully.

設定したパスワードは忘れないようにメモしておいてください。

作成したユーザーでログインできるか確認するため、rootユーザーは一旦ログアウトします。

# logout
> 
> CentOS Stream 9
> Kernel 5.14.0-354.el9.x86_64 on an x86_64

adminユーザーでログインできることを確認します。

# login: admin
> Password:
> $

ユーザーにsudo権限をつける

作成したadminユーザーにsudo権限をつけます。
adminユーザーでログインしている場合、ログアウトして、rootユーザーで再度ログインします。

adminユーザーの場合はログアウトします

$ logout

rootユーザーで再ログイン

vm-0bd3dadf-5b login: root
Password:
Last login: Wed Jul 17 07:48:05 on ttyS0

以下のコマンドで、adminユーザーをwheelグループに追加します。
-aオプションがない場合、wheelグループに追加ではなく上書きになってしまうので注意してください。

# usermod -aG wheel admin

再度、adminユーザーでログインして、sudoが使用できるか確認します。
パスワード入力が求められるので、adminユーザーのパスワードを入力します。

$ su - admin
Password

試しにsudoでvimのバージョンを確認してみます。

$ sudo vi -v

パスワードを入力したあと、vimのバージョンが確認できればOKです。

スクリーンショット 2024-12-18 13.06.40.png

rootユーザーでSSH接続できないようにする

rootユーザーで不正アクセスされると、システムを一発で乗っ取られてしまうため、
rootユーザーでのログインを禁止しておきます。

sshd_configファイルを開き、PermitRootLoginをnoにします。

$ sudo vim /etc/ssh/sshd_config

noに変更

#PermitRootLogin prohibit-password
PermitRootLogin no 

サーバーをリスタートします。

$ sudo systemctl restart sshd

一度logoutして、rootでログインできなくなっていればOKです。

rootでログインできちゃうんだけど??っていう方は、
もし、rootユーザーによるSSH接続や、パスワードによるSSH接続ができてしまう場合に確認すること
の章を確認してみてください。

SSH接続するポート番号を変更する

セキュリティ強化のため、SSH接続するポート番号をデフォルト値の22から別の値に変えます。

sshd_configファイルを開きます

$ sudo vim /etc/ssh/sshd_config

番号を変更します

#Port 22
Port 10022

リスタートします

sudo systemctl restart sshd

公開鍵認証方式でログインする

今まではパスワードによってログインしていましたが、
セキュリティ強化のため、公開鍵認証方式でのログインに変更します。

VPSサーバー側で公開鍵認証方式を有効にする

まず、VPSサーバー側で公開鍵認証方式を有効にします

sshd_configを開きます

sudo vim /etc/ssh/sshd_config

コメントアウトされている以下の一文を有効にします

PubkeyAuthentication yes

リスタートで設定を反映します

sudo systemctl restart sshd

セキュリティグループの設定

変更したポート番号で公開鍵認証方式でのアクセスを許可するため、セキュリティグループの設定を行います。

まず、ConoHaのコントロールパネルで、セキュリティ>セキュリティグループ のページを開きます。

ページの右上に「+セキュリティグループ」ボタンがあるのでクリックします。
07_1_セキュリティグループ画面-2-2.png

セキュリティグループ名、および説明を記入し、「保存」ボタンを押します。

08_セキュリティグループ作成-2.png

保存すると、下のセキュリティグループの一覧に保存したものが追加されるので、以下のように設定します。

通信方向 イーサタイプ プロトコル ポート範囲 IP/CIDR
Out IPv6 ALL
Out IPv4 ALL
In IPv4 TCP 10022 0.0.0.0/0
In IPv6 TCP 10022 ::/0

09_セキュリティグループ設定-2.png

サーバーの詳細画面に戻り、作成したセキュリティグループを追加します。

10_セキュリティグループ割り当て-2.png

SSHキーの設定

SSHキーを作成する

セキュリティ>SSH Keyページの「追加」ボタンから適当な名前で作成します。

11_SSHKEY画面-2.png

追加する際、プライベートキー(秘密鍵)がPCにダウンロードされます。

パプリックキー(公開鍵)はこのページで確認できます。
次の手順でパブリックキーをサーバーに設定するため、値をどこかにコピーしておきます。

パプリックキーをVPSサーバーに設定する

VPSサーバーに入り、.sshディレクトリを作成します。

// ディレクトリを移動
$ cd /home/admin

// .sshディレクトリを作成
$ mkdir .ssh

.sshディレクトリにauthorized_keysファイルを作成します。

$ cd .ssh
$ vi authorized_keys

authorized_keysファイルに、先ほどコピーしておいたパブリックキーを貼り付け、保存して閉じます。

また、権限を変更しておきます。
※以下のコマンドは.sshディレクト内で実施する前提になっています。

$ sudo chmod 700 ./authorized_keys

シークレットキーを自分のPCの.sshディレクトリに移動する

SSH Keyを作成した際にダウンロードされたシークレットキーは自分のPCの.sshディレクトリに移動しておきます。
(もし、.sshディレクトリが存在しない場合は作成してから移動します)

Downloadsディレクトリにダウンロードされたシークレットキーを、.sshディレクトリに移動するコマンドの例
※自身のPCのディレクトリ構成に合わせて変更してください

$ mv /Users/<ユーザー名>/Downloads/<作成したキーの名前>.pem /Users/<ユーザー名>/.ssh/<作成したキーの名前>.pem

また、シークレットキーの権限を変更しておきます。

$ cd /Users/<ユーザー名>/.ssh
$ sudo chmod 600 ./<作成したキーの名前>.pem 

ファイアウォールの設定

VPSサーバーにログインしてファイアウォールの設定を変更し、22番ポートを未許可にするとともに、10022番ポートを許可します。

ファイアウォールが起動していることの確認

$ sudo firewall-cmd --state
running

設定の確認

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

servicesの欄にsshとあるため、ポート22が解放されています。
なのでまずこれを閉じます。

sshを許可対象から除外します

$ sudo firewall-cmd --permanent --remove-service=ssh
success

ファイアウォールの設定を反映します

$ sudo firewall-cmd --reload
success

設定を再度表示し、servicesの欄にsshが消えたことを確認します

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

次に、ポート10022を開放します

$ sudo firewall-cmd --zone=public --add-port=10022/tcp --permanent
success

ファイアウォールの設定を反映します

$ sudo firewall-cmd --reload
success

設定を再度表示し、portsの欄に10022/tcpが追記されたことを確認します。

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

sshd_config ファイルを編集

以下コマンドでsshd_configファイルを開きます。

sudo vim /etc/ssh/sshd_config

Portの設定がコメントアウトされているはずなので、10022に設定をしておきます。

#Port 22
Port 10022

設定に誤りがないか確認

sudo sshd -t

SSHサービスの再起動を行い、設定を反映させます。

sudo systemctl restart sshd

公開鍵認証方式によるSSH接続を試す

以上の設定で、公開鍵認証方式によるSSH接続ができるようになっているはずです。
PCのターミナルからSSH接続できることを確認します。

$ ssh -i ./<ダウンロードした秘密鍵> <ユーザー名>@<VPSサーバーのアドレス> -p <ポート番号>

 $ ssh -i ./key-for-ssh.pem admin@111.111.111.11 -p 10022

以下のように、接続しますか?と聞かれるので、yesと打つと接続できます

Are you sure you want to continue connecting (yes/no/[fingerprint])?

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

公開鍵認証方式によるログインができるようになったら、セキュリティ強化のためにパスワードによるログインは禁止しておきます。

VPNサーバーにアクセスして、sshd_configファイルを開きます。

$ sudo vim /etc/ssh/sshd_config

PasswordAuthenticationの設定をnoに変更して保存します。

# PasswordAuthentication yes
PasswordAuthentication no

SSHサービスの再起動を行い、設定を反映させます。

$ sudo systemctl restart sshd

ここまで設定したら、以下について確認するのがおすすめです。

  • rootユーザーでSSH接続できないこと
  • adminユーザー(自分の作成したユーザー)でSSH接続できること
  • パスワードによるSSH接続はできないこと
  • 許可していないユーザーでSSH接続できないこと
  • ポート番号22でSSH接続できないこと
  • ポート番号10022(自分の設定した値)でSSH接続できること

もし、rootユーザーによるSSH接続や、パスワードによるSSH接続ができてしまう場合に確認すること

VPSサーバーに入り、sshdの設定を確認します。

sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication'

期待値
rootログインおよびパスワードによるログインが禁止されている

permitrootlogin no
passwordauthentication no

もしこの結果の両方もしくは片方がyesになっている場合、
sshdの設定ファイル内で別のファイルがIncludeされており、
そのIncludeされているファイルの設定が反映されている可能性があります。

以下のコマンドで、別のファイルが存在しないか確認します。

$ sudo ls -l /etc/ssh/sshd_config.d/

出力例

$ sudo ls -l /etc/ssh/sshd_config.d/
total 12
-rw-r--r--. 1 root root 141 Nov 12  2021 01-permitrootlogin.conf
-rw-------  1 root root  27 Dec 18 11:45 50-cloud-init.conf
-rw-------  1 root root 719 Oct 21 21:30 50-redhat.conf

このようにファイルがヒットしたら、各ファイルの中身を確認していきます。

sudo cat /etc/ssh/sshd_config.d/01-permitrootlogin.conf
sudo cat /etc/ssh/sshd_config.d/50-cloud-init.conf
sudo cat /etc/ssh/sshd_config.d/50-redhat.conf

ファイルの中にもし以下の設定があれば、noに書き換えます
(rootログインを許可する設定と、パスワードによるログインを許可する設定です)

permitrootlogin yes
passwordauthentication yes

最後に、sshdを再起動して設定を反映させます。

$ sudo systemctl restart sshd

再度、sshdの設定を確認し、値がnoになっていることを確認します。

$ sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication'

期待値

permitrootlogin no
passwordauthentication no

SSH設定ファイルに接続情報を追加する

SSH設定ファイルに接続情報を記載すると、SSH接続する際にコマンドの入力を省略することができます。
この設定は、後段のVSCodeでSSH接続をする際にも使用します。

手元のPCでターミナルを開いて、SSH設定ファイルを編集します。
(ファイルがなければ作成してください)

$ vi ~/.ssh/config

以下を追加します。
サーバー名は、自分のわかりやすいものをつければ大丈夫です。

Host <サーバー名>
    HostName <VPSのアドレス>
    User <ユーザー名>
    IdentityFile <秘密鍵のパス>
    Port <ポート番号>

Host ConoHaDev
    HostName 111.111.111.11
    User admin
    IdentityFile ~/.ssh/key-for-ssh.pem
    Port 10022

これで、PCのターミナルから、追加したホスト名を打つだけでssh接続ができるようになります。

$ ssh ConoHaDev

おまけ:VSCodeでConoha VPSへSSH接続する

私はVSCodeを使って開発を行っているため、
VSCodeからSSH接続できると便利なのでやり方をメモしておきます。

拡張機能のRemote - SSH をインストールします。

スクリーンショット 2024-12-18 22.55.05.png

ダウンロードすると、左下の角に、><みたいな形の青いボタンが追加されます

スクリーンショット 2024-12-18 22.55.22.png

それをクリックすると、「ホストに接続する...」という選択肢が出てくるのでクリックします

スクリーンショット 2024-12-18 22.55.33.png

先ほど作成した接続設定(ConoHaDev)を選択します
スクリーンショット_2024-12-18_22_55_44.png

すると、VSCodeから ConoHaのサーバーにSSH接続することができます

スクリーンショット 2024-12-18 22.56.06.png

「フォルダーを開く」ボタンをクリックすると、開くフォルダーを選択でき、フォルダーの中身も確認することができます

スクリーンショット 2024-12-18 22.56.28.png

あとは、自分の好きなように開発環境を構築すればOKです

あとがき

元々は外出先で開発環境に困っていたのがきっかけでしたが、サーバーの設定をするだけでも色々勉強になりました。
本記事ではVSCodeでSSH接続するところまででしたが、その後の環境構築についてもチャレンジしてみたいと思います。

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?