🌿

VS Code に Remote-SSH をインストールし、公開鍵認証方式で Ansible サーバーに接続してみた

2024/04/21に公開

Windows 10 にインストールした VS Code から Ansible サーバー (Linux サーバー)に公開鍵認証で SSH 接続したときの設定メモです。 Ansible Night 2024.3 のえんでぃ氏のデモで、サラッと流していたのでまとめてみました。

3 行まとめ

  • "VS Code" + "Remote - SSH" で Windows から直接 Ansible サーバーに接続できます
  • Windows 上と同じ感覚で Ansible サーバー上のディレクトリー / ファイルを操作できます
  • playbook の実行も Windows から行えます

鍵を準備する

公開鍵認証で Ansible サーバーに接続するための鍵を準備します。コマンドプロンプトで作業します。

ssh-keygen -t ed25519

ssh-keygen コマンドを実行すると何度か値を入力するようプロンプトが表示されます。すべて [Enter] キーを押して処理を進めます。

C:\Users\y_mrok>ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\y_mrok/.ssh/id_ed25519):
Created directory 'C:\Users\y_mrok/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\y_mrok/.ssh/id_ed25519.
Your public key has been saved in C:\Users\y_mrok/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:eEbsH8w3DAIGsDzzJtOEPGfBbihOyQrd9nFbfnN+3zY y_mrok@DESKTOP-DOONA1N
The key's randomart image is:
+--[ED25519 256]--+
|  .oo.o          |
| o o.o o         |
|..X++   + .      |
|o+oX= .+.+.o     |
|=.oo+..oS++ +    |
|.. +  .o...oo..  |
|          .. +   |
|              .E+|
|               o=|
+----[SHA256]-----+

C:\Users\y_mrok>

実行ログの以下の 2 行が作成した鍵の保管フォルダーを示しています。作成した鍵は %USERPROFILE%\.ssh\ フォルダーに保管されます。

Your identification has been saved in C:\Users\y_mrok/.ssh/id_ed25519.
Your public key has been saved in C:\Users\y_mrok/.ssh/id_ed25519.pub.

エクスプローラーで %USERPROFILE%\.ssh\ フォルダーを確認すると、2 つの鍵ファイルがあります。拡張子 .pub がついているのが公開鍵、ついていないのが秘密鍵です。

公開鍵を配置する

作成した公開鍵を Ansible サーバーに ~/.ssh/authorized_keys として配置します。 Linux は ssh-copy-id コマンドを使用しますが Windows にありません。代わりに scp コマンドを使用します。

scp %USERPROFILE%\.ssh\id_ed25519.pub y_mrok@192.168.0.10:~/.ssh/authorized_keys
C:\Users\y_mrok>scp %USERPROFILE%\.ssh\id_ed25519.pub y_mrok@192.168.0.10:~/.ssh/authorized_keys
The authenticity of host '192.168.0.10 (192.168.0.10)' can't be established.
ECDSA key fingerprint is SHA256:bCHcvanuEFzuwFh6MijCZTdUl8vOI5UERMW7hzh6lj0.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Warning: Permanently added '192.168.0.10' (ECDSA) to the list of known hosts.
y_mrok@192.168.0.10's password:
id_ed25519.pub                                                                        100%  105     0.1KB/s   00:00

C:\Users\y_mrok>

初めて Ansible サーバーに接続したときは以下のプロンプトが表示されます。 yes を入力し、処理を進めます。なお、入力した文字は表示されません。

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

ssh コマンドで Ansible サーバーに接続し、コピーした公開鍵にパーミッションを設定します。

ssh 192.168.0.10 -l y_mrok

公開鍵認証で接続できました。

C:\Users\y_mrok>ssh 192.168.0.10 -l y_mrok
Last login: Sun Apr 21 06:38:08 2024
[y_mrok@ansible1 ~]$

~/.ssh/authorized_keys ファイルのパーミッションが 0644 になっています。他の人から読まれないように 0600 に変更します。

ls -l ~/.ssh
chmod 0600 ~/.ssh/authorized_keys
ls -l ~/.ssh
[y_mrok@ansible1 ~]$ ls -l ~/.ssh
total 8
-rw-r--r--. 1 y_mrok y_mrok 105 Apr 21 07:42 authorized_keys
-rw-------. 1 y_mrok y_mrok  65 Apr 21 06:39 config
[y_mrok@ansible1 ~]$ chmod 0600 ~/.ssh/authorized_keys
[y_mrok@ansible1 ~]$ ls -l ~/.ssh
total 8
-rw-------. 1 y_mrok y_mrok 105 Apr 21 07:42 authorized_keys
-rw-------. 1 y_mrok y_mrok  65 Apr 21 06:39 config
[y_mrok@ansible1 ~]$

VS Code に拡張機能 Remote - SSH を導入する

導入前

拡張機能として Japanese Language Pack for VS Code だけが導入済みです。

導入

名前に ssh が含まれる拡張機能を検索します。

候補の先頭に Remote - SSH があるので [インストール] ボタンをクリックしてインストールします。

インストール後の状態です。 Remote - SSH の他に 2 つの拡張機能が一緒に導入されました。左端の拡張機能のアイコンの下にリモートエクスプローラーのアイコン(モニターに右下に◯がついたアイコン)が追加されました。

VS Code から Ansible サーバーに接続するための設定をする

リモートエクスプローラーのアイコンをクリックします。

左側のペイン内の SSH の右端にある歯車のアイコン(SSH 構成ファイルを開く)をクリックします。

プルダウンリストに構成ファイルが表示されたら c:\Users\y_mrok\.ssh\config をクリックします。

構成ファイルの内容が表示されたら、Ansible サーバーに接続するための情報に更新します。更新後は [Ctrl] + [S] を押して内容を保存します。

【更新前】

# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host alias
    HostName hostname
    User user

【更新後】

項目 設定する値
Host 接続先のホスト名
HostName 接続先ホストの IP アドレス
User 接続する時に使用するユーザー名
IdentityFile 秘密鍵のフル path
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config
Host Ansible1
    HostName 192.168.0.10
    User y_mrok
    IdentityFile C:\Users\y_mrok\.ssh\id_ed25519

リモート(トンネル/SSH) の右端のクルッとしたアイコン(更新する)をクリックします。

構成ファイルの Host に指定した名前のアイコンが表示されます。

VS Code から Ansible サーバーに接続する

構成ファイルの Host に指定した名前のアイコンの右端の → のアイコンをクリックします。

接続先の OS を選択するプルダウンリストが表示されたら Linux をクリックします。

Ansible サーバーに接続中です。

左下に SSH:Ansible1 と表示されたら接続終了です。

エクスプローラーのアイコン ⇒ [フォルダーを開く] をクリックします。

Ansible サーバーのホームディレクトリー内のディレクトリーがプルダウンリストで表示されます。今回は ansible-night-202403 (/home/y_mrok/ansible-night-202403/ )を選択します。

フォルダーの選択後 [OK] をクリックします。

接続先の OS を選択するプルダウンリストが表示されたら Linux をクリックします。

「作成者を信頼しますか?」のダイアログが表示されたら [はい、作成者を信頼します] をクリックします。

左側のペインに Ansible サーバー内の選択したディレクトリーのツリー構造が表示されます。ファイルも確認できます。右下に表示されているダイアログは [Don't Show Again] をクリックして消去します。

ターミナルを開くと、Ansible サーバーでのターミナルになります。

このターミナルで Ansible を実行します。

Discussion