🔑

ConoHa VPSに公開鍵認証でSSH/SCP接続する手順

2023/02/02に公開

概要

最近ConoHa VPSで新しくサーバーを立てて、公開鍵認証でSSH/SCP接続できるようにしたのでその手順を書いておきます。

>はサーバー側のプロンプト、$はクライント側のプロンプトを表します。

環境

サーバー側

  • Rocky Linux 9.0 (64bit)
> uname -a
Linux 157-7-64-69 5.14.0-70.17.1.el9_0.x86_64 #1 SMP PREEMPT Wed Jul 13 18:23:04 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
  • SSH サーバー
> ssh -V
OpenSSH_8.7p1, OpenSSL 3.0.1 14 Dec 2021

クライント側

  • Windows 11 Home 22H2
  • SSH クライアント
$ ssh -V
OpenSSH_for_Windows_8.6p1, LibreSSL 3.4.3
  • WinSCP Version 5.21.5 (Build 12858 2022-10-06)
  • Putty Release 0.77

0. ユーザー作成

例としてhogeというユーザーを作ります。ConoHaのダッシュボードからブラウザでコンソールを開きます。rootにログインして以下を実行します。

> useradd hoge -d /home/hoge -m
> passwd hoge  # パスワードを設定
> getent group wheel  # wheelグループに所属するユーザー一覧を確認
> usermod -aG wheel hoge  # wheelグループに追加(sudoできるようにするため)
> getent group wheel  # 追加されたことを確認

これ以降は今作ったユーザーにログインして作業します(> login)。

1. SSHサーバーの設定

設定ファイル

SSHサーバーの設定ファイルを編集します。

> sudo vim /etc/ssh/sshd_config

※vimは:wqで保存して終了、:q!で保存せず終了できます。念のため。

つぎの項目を設定します。本当に必要なのはPubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keysだけですが他の項目も一部説明します。

PubkeyAuthentication yes

公開鍵認証による接続を有効化します。コメントアウトされていると思うのでアンコメントアウトしておきます。デフォルトでyesですが明示的に書いておきます。

AuthorizedKeysFile .ssh/authorized_keys

公開鍵たちを~/.ssh/authorized_keysに書き込むので、それを参照するように設定します。この項目は初めからあると思います。

PasswordAuthentication no

パスワード認証による接続を無効化します。#PasswordAuthentication yesという行があると思うのでその下あたりに書くとわかりやすいです。

Port 12345

SSH接続に使用するポート番号を指定します。デフォルトは22です。

Protocol 2

SSHの暗号化にはプロトコル1と2がありますが、より新しくて強力なプロトコル2のみを使用するように設定します。

PermitRootLogin no

SSH接続でrootへログインできないようにします。

サービス再起動

設定を反映させるためにsshdを再起動します。

> sudo systemctl restart sshd

設定ファイルに問題があった場合は> sudo systemctl status sshdでエラーを見ることができます。

2. 鍵の準備

ConoHaのコントロールパネルから生成することもできるようですが、ここではクライアント(Window)上で生成する手順を説明します。

鍵の生成

$ ssh-keygen -t rsa -b 4096

%userprofile%\.ssh\以下にキーファイルが生成されます。id_rsaが秘密鍵、id_rsa.pubが公開鍵です。id_rsa.pubをアップロードします。id_rsaは外に出してはいけません。

公開鍵をアップロード

サーバーの~/.ssh/authorized_keysにクライアントのid_rsa.pubの内容を追記(なければ新規作成)します。

このときだけPasswordAuthentication yesにしておいて、

$ ssh hoge@12.34.56.78 -p 12345
# パスワードを入力
> mkdir -p ~/.ssh
> vim ~/.ssh/authorized_keys

ここでauthorized_keysに先程のid_rsa.pubの内容をコピペします。

authorized_keysの編集が終わったらアクセス権限を変えておきます。これをやらないと接続できません。

> chmod 600 ~/.ssh/authorized_keys
> chmod 700 ~/.ssh

3. ファイアウォール

ConoHa側とサーバー側の2つのファイアウォールがあります。ConoHa側は「全て許可」にして、サーバー側で細かい設定をするケースが多いと思います。本記事でもその方法をとります。

ConoHa

ConoHaのダッシュボードの「サーバー」→「ネットワーク情報」→「接続許可ポート」→「全て許可」を選択

firewall-cmd

デフォルトではすべてのポートが閉じた状態なので、SSH接続に使うポート(ここでは12345)だけを開けます。

> sudo firewall-cmd --add-port=12345/tcp --permanent
> sudo systemctl restart firewalld   # サービスを再起動
> sudo firewall-cmd --list-ports   # 確認

firewall-cmd自体の使い方は次のサイトがわかりやすいです。

4. 接続確認

接続できるか確認します。

$ ssh hoge@12.34.56.78 -p 12345

WinSCPを使わないならここで終了です!

5. WinSCP

インストール

$ scoop install winscp
$ scoop install putty  # puttygenを使うので必要

WinSCPの設定

WinSCPを起動し、「Tools」→「Preferences」→「Integration」の下の「Application」でputty.exeの場所を指定します。scoopでインストールした場合%userprofile%\scoop\putty\current\putty.exeにあります。

WinSCPを一旦閉じてもう一度起動します。

秘密鍵を変換

ssh-keygenで生成した鍵はOpenSSH形式ですが、WinSCPが読めるのはPPK形式です。そのため変換する必要があります。

WinSCPの「Tools」→「Run PuTTYgen」を押します。

PuTTYgenが起動したらメニューの「Conversions」→「Import key」。.ssh\id_rsaファイルを選択して、「save private key」を押して適当な場所に保存します。これで変換できました。

PuTTYgenはもう閉じて良いです。

WinSCPで接続

protocolをSCPにして、Host name、Port number、User nameを適切に入力します。
Advancedボタンを押して開いた画面で「SSH」→「Authentication」→「Private key file」で先程保存したPPK形式の鍵を指定します。
Passwordは空のままLoginを押します。

これで接続できるはずです。

Discussion