ConoHa VPSに公開鍵認証でSSH/SCP接続する手順
概要
最近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 yes
とAuthorizedKeysFile .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