ConoHa VPSにUbuntu。VS CodeでSSH接続。

VPSサーバーにVS CodeでSSH接続します。OSはUbuntu。パスフレーズ付の鍵を設定し、VPSサーバー上のフォルダを表示します。「WARNING: UNPROTECTED PRIVATE KEY FILE!」への対応も説明します。

また、Pythonを実行するのに必要な拡張機能をインストールし、「この大規模なワークスペースでのファイルの変更をウォッチできません。」というWarningにも対応します。

バージョンは、Windows10 Home 1909、Ubuntu 20.04.1 LTS、Python 3.9.0、Django 3.1.2、VS Code 1.50.1です。

1.VS Codeのインストール

Visual Studio Codeのダウンロード」からインストールファイルをダウンロードし、VS Codeをインストールします。ひとまずVS Codeが起動すればいいので、特に悩むところはないと思います。

2.拡張機能のインストール

起動したVS Codeに以下の拡張機能をインストールします。

  • Japanese Language Pack for Visual Studio Code
  • Remote Development

なお、Remote Developmentをインストールすると以下の拡張機能も一緒にインストールされます。

  • Remote - Containers
  • Remote - SSH
  • Remote - SSH: Editing Configuration Files
  • Remote - WSL

サーバーの環境でPythonを実行するだけなら、この段階でこれ以上の拡張機能は必要ありません。Pythonの拡張機能はSSH接続した後にインストールします。

では、まず日本語に対応させます。左側のExtensions(拡張機能)ボタン①を押します。そして、②の欄に「japanese language pack・・・」と入力します。次に③の緑のinstallボタンを押すと右下④にRestaart Nowのウィンドウが現れますので、ボタンを押し再起動します。

なお、下の図はインストール後の画面なので③のところは歯車のマークになっています。

再起動したら「Remote Development」をインストールします。同様に左側の拡張機能(Extensions)ボタンを押し、左上の欄に「Remote Development」と入力し緑のinstallボタンをクリックします。

次に、先ほど入力した「Remote Development」の文字を消してみましょう。すると、インストール済の拡張機能一覧が表示されます。Remote - Containers、Remote - SSH、Remote - SSH: Editing Configuration Files、Remote - WSLも一緒にインストールされていることがわかります。

  • Remote - Containers
  • Remote - SSH
  • Remote - SSH: Editing Configuration Files
  • Remote - WSL

3.SSH接続の設定ファイル

SSH接続の設定ファイルの名前はconfigです。拡張子はありません。以下、configファイルの内容を書き換え、接続の設定を指定します。

(1) SSH接続設定ファイルの表示

左下の歯車マークから「コマンドパレット」を選択します。コマンドパレットはショートカットキー「F1」あるいは「Ctrl+Shift+P」でも起動できます。

そして、コマンドパレットに「Remote-SSH: Open Configuration File」と入力し、Enterキーで実行します。入力の途中でコマンドの候補がドロップダウンリストに表示されるので、すべてを入力する必要はありません。また、赤字の部分だけでも検索可能です。

「Remote-SSH: Open Configuration File」を選択すると、次に以下の項目が表示されるので、「c:\User\ユーザー名\.ssh\config」を選択します。

  • c:\User\ユーザー名\.ssh\config
  • c:\ProgramData\ssh\ssh_config
  • Settings specify a custom configuration file
  • Help about SSH configuration files

すると、configファイルの内容が表示されます。

04_SSH接続の設定ファイルconfig_02

次に書き換えるときには同じ手順でconfigファイルを開いてもいいですし、c:\User\ユーザー名\.ssh\のなかにあるconfigをテキストエディタで直接編集してもかまいません。

(2) configファイルの書き換え

https://linux.die.net/man/5/ssh_config」にはconfigの詳細な設定方法が記述されています。

以下、サーバーに鍵認証で接続する場合の基本的なconfigの記述例を示します。

Host test_connect  #接続の名称(任意の名称)
  HostName 254.254.254.254  #接続したいリモートサーバーのIPアドレス
  User ユーザー名  #Ubuntuで設定したユーザー名
  Port 22  #SSH接続のポート番号を変更した場合には22以外の番号
  IdentityFile C:\Users\秘密鍵の保存場所のパス\秘密鍵の名前
  ServerAliveInterval 60  #サーバに接続信号を送る間隔(秒)

Host:
好きな名称を記述します。設定終了後、接続先を選択する場合にこの名称が表示されます。

HostName:
IPアドレスやドメイン名

User :
「root」でも入れますが、セキュリティー上問題があるので、Ubuntuで設定した一般ユーザー名を設定しましょう。

Port:
サーバーのSSH接続のポート番号。Ubuntuのディフォルトでは22。セキュリティ強化のためにポート番号を変更した場合には変更後のポート番号。

IdentityFile:
自分のPCの中にある秘密鍵のパス。秘密鍵の名称まで入力する必要があります。

ServerAliveInterval:
サーバに接続信号を送る間隔(秒)。自分のPC(ローカル)のネット環境によっては、一定期間データの送受信がない場合にIPアドレスが変わることがあります。IPアドレスが変わるとSSH接続が切断されてしまうので、定期的に信号を送りIPアドレスが変わるのを防ぎます。60秒ぐらいに設定することが多いようです。

(3) configファイルの保存

下図の緑枠の部分を見て下さい。configのタブの右側に黒丸。左上のエクスプローラーのところに青丸の1が表示されています。これは、未保存のファイルがあることを示します。configファイルを書き換えて有効にする場合には、必ず「ファイル」→「保存」で設定内容を保存しましょう。

04_SSH接続の設定ファイルconfig_02

(4) configファイルのパス

configファイルのパスは任意のディレクトリに変更可能です。ディフォルトのパスから変更することはセキュリティ上よいことだと思います。

まず、自分の好みの場所にテキストエディタでconfigファイルを作成します。

次に拡張機能「Remote - SSH」の歯車のマークから「拡張機能の設定」を選択し、「Remote.SSH: Config File」という項目を探します。そして、項目の空欄にconfigファイルを作成したパスを指定します。なお、パスの最後にconfigファイルのファイル名を忘れないようにしましょう。

19_configのパス設定

4.SSH接続設定における注意事項

以下、私が特に悩んだ設定項目について列挙します。

(1) 秘密鍵の保管場所には注意

私が一番悩んだのは以下のWARNINGです。私は自分のPCのCドライブの直下に設定の練習用としてディレクトリ「TEST」を作り、そこに秘密鍵を置いたのがWARNINGの原因です。

全ユーザーが共有できるCドライブ直下に鍵を置くことはセキュリティ上問題があるので許容できないという意味のWARNINGです。鍵は"Users"フォルダの中に保管する必要があります。

理由が分かってエラーを見ると「なるほど」とわかるのですが、知らないと沼にはまります。以下、Cドライブの直下にtestという名称のフォルダを作り、秘密鍵を保存した場合のWARNINGです。

> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> @         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
> @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
> Permissions for 'C:\\test\\id_rsa' are too open.
> It is required that your private key files are NOT accessible by others.
> This private key will be ignored.
> Load key "C:\\test\\id_rsa": bad permissions
> id@XXXX: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

(2) WindowsのOpenSSHクライアントの設定

Windows10の「スタートメニュー」→「設定」→「アプリ」→「アプリと機能」→「オプション機能」を開き、「OpenSSHクライアント」がインストールされている必要があります。

私の環境では最初からインストールされていました。

(3) 使えない鍵の種類がある

WindowsのVS Codeの拡張機能ではOpenSSHを使って鍵認証を行います。ターミナルクライアントソフトにPuTTYを使っている場合には、PuTTYで作成した鍵の形式を認識できません。

Windows10では鍵を作成するコマンドがありますが、Tera Termで作成した鍵も使えるので私は以下の方法で鍵を作成しました。

ConoHa VPSにUbuntu。スタートアップガイドの読み方。

(4) 秘密鍵のパスフレーズは設定できる?

秘密鍵にパスフレーズを使用する場合でも特に設定は不要です。設定ファイルconfigにもパスフレーズの記述はありません。セキュリティ向上のため、できるだけパスフレーズ付の秘密鍵を使いましょう。

5.ターミナルをいつも表示する

接続先でLinuxサーバーのターミナルがいつも表示された状態になるように設定します。まず、拡張機能のボタンを押したあと、拡張機能Remote SSHの右の①歯車マークをクリック、②拡張機能の設定を選択します。そして、「Remote SSH:Show Login Terminal」の「Always reveal login terminal」にチェックを入れます。

こうすることで、リモートサーバーに接続後にサーバーを操作するターミナルが絶えず開いた状態になるため操作しやすくなります。

ここにチェックを入れていないと、このあとの画面表示や設定の手順が少し変わってしまいます。

05terminalをいつも表示

以上で、接続前の設定は終了です。

6.リモートサーバ-への接続

いよいよ、リモートサーバーに接続します。左側の①リモートエクスプローラーのボタンをクリックし、先ほどconfigファイルで設定した「test_connect(下の図ではtest_user)」の右側の②「Connect to Host in New Window 」のボタンをクリックします。

※接続名称はtest_userよりもtest_connectの方がしっくりくるため、この記事の本文だけtest_connectに書き換えました。以下、図中のtest_userはtest_connectと読み替えて下さい。

すると、別のウィンドウでVS Codeが起動します。サーバーのOSの種類を聞かれるのでLinuxを選択します。なお、OSの選択に時間をかけすぎるとドロップダウンリストが消え、エラーになるので慌てず速やかに選択しましょう。

消えた場合は、もう一度SSHに接続するところからやり直せば大丈夫です。

07_Linuxを選択

Linux選択直後に以下の様なメッセージが表示されることがありますが、これは「OSの種類を保存したので、変更したいときにはRemote.SSH: Remote Platformを使うように」という意味です。

選択したOSの設定はローカル環境Windows10の「C:\Users\ユーザー名\AppData\Roaming\Code\User\settings.json」に保存されます。また、「左下の歯車」→「設定」からコマンド「Remote.SSH: Remote Platform」を検索し、OSを変更することができます。

なお、「左上のファイル」→「ユーザー設定」→「設定」でも、「左下の歯車」→「設定」でも同じ設定画面を立ち上げることができます。

20_OSの種類を保存

さて、サーバーのOSを選択しEnterキーを押すと、下部のターミナルで「yes/no」を問われますので「yes」と入力します。「y」だけではダメです。

ここでは、「始めて接続するサーバーだけど大丈夫?」と聞かれています。そして、「yes」を選択すると、「ECDSA key fingerprint」つまり、サーバーの指紋のような記号が自分のpcの中の「known_hosts」という名前のファイルに保存されます。次のログインからは聞かれません。「known_hosts」はconfigファイルと同じ「c:\User\ユーザー名\.ssh\known_hosts」に保存されます。

08_fingerprint

ここでも、時間をかけすぎると接続できず、以下のようなエラーになりますが、その場合はCloase Remoteボタンを押して終了し、再接続しましょう。

09_close_remote

うまく接続できるとターミナルに「Enter passphrase for key 'c:\user\キーの保存場所\キーの名前:」と表示されるので、秘密鍵のパスフレーズを入力します。

パスフレーズを入力してEnterを押し、しばらくターミナルに文字が流れたあと、最後の行の後方に「:end」が表示されると接続完了です。

7.リモートサーバー側に拡張機能をインストール

リモートサーバー側にもVS Codeの拡張機能をインストールします。自分のPC(クライアント)側とリモートサーバー側の拡張機能は別物なので、同じ拡張機能だとしても必要ならば改めてリモートサーバー側でもインストールしなおす必要があります。

新しく立ち上がったリモートサーバー側のVS Codeに以下の拡張機能をインストールします。

  • Japanese Language Pack for Visual Studio Code
  • Python

リモートサーバー側のVS Codeの①拡張機能ボタンを押し、「Japanese Language Pack for Visual Studio Code」の②「SSH:test_userにインストール」をクリックしてインストールします。今度は再起動にはなりませんでした。また、「Japanese Language Pack for Visual Studio Code」をインストール前から日本語になっていましたが、念のためリモートサーバー側にもインストールしました。

次に③の欄にpythonと入力し、表示された拡張機能pythonをインストールします。

先ほどと同様に入力欄に入力した「python」の文字を消去すると、下図のようにクライアント側にインストールした拡張機能(赤枠)と、リモート側にインストールした拡張機能(青枠)の一覧が表示されます。

8.拡張Remote SSHの設定を再確認

クライアント側(LOCAL側)でインストールした拡張機能Remote SSHの歯車ボタンをクリックして、「Remote SSH:Show Login Terminal」の「Always reveal login terminal」にチェックが入っているか、もう一度確認します。

チェックが消えていたら、チェックを入れ直します。

9.サーバーのフォルダを開く

左上の赤枠のエクスプローラーボタンをクリックし、「フォルダーを開く」をクリックする。

開くフォルダ名を入力します。入力欄にディフォルトでは「/home/ユーザー名/」が入力されていますが、実際に使用する場合には使用する仮想環境のディレクトリを指定すると使いやすいと思います。

13_開くフォルダを指定

再び秘密鍵のパスフレーズを問われるのでパスフレーズを入力します。

14_パスフレーズ再入力

パスフレーズが承認され、ターミナルの最後の行に「:end」と表示されます。そして、左側には開いたサーバーのディレクトリ内部が表示されます。

なお、右下に「この大規模なワークスペースでのファイルの変更をウォッチできません。この問題を解決するには、手順のリンクに従ってください。」というWarningが表示されますが、一旦、無視しましょう。後で対応します。

15_パスワードの承認

ターミナルの右上の「2.install」と表示されたドロップダウンウィンドウを「1.bash」に切り替えます。

ただ、時々「1.install」となり、「bash」が選択子にない場合があります。その場合は右隣の「+」をクリックし、ターミナルに「bash」を追加してください。

16_bashを選択

ターミナルの表示が切り替わり、Tera Termなどのターミナルクライアントソフトで表示されるのと同じようにサーバーのコンソール画面が表示されます。これで接続完了です。

17_コンソール表示

10.ワーニング「この大規模なワークスペース・・・」

さて、後回しにした以下のWarningについて対応したいと思います。

18_大規模なワークスペース

これはLinuxのファイル ウォッチャーが使用できるファイル数の最大値を超えていることを示します。ファイル数の最大値は以下のコマンドで確認できます。ちなみに私の環境ではディフォルト値は8192でした。

$ cat /proc/sys/fs/inotify/max_user_watches
$ 8192

ファイルウォッチャーが使用できるファイル数の最大値はサーバーの「/etc/sysctl.conf」を書き直すことによって変更できます。

$ sudo vi /etc/sysctl.conf

sysctl.confの最後に以下の行を追加します。なお、524288より大きい数字は指定出来ません。

fs.inotify.max_user_watches=524288  #524288が最大値

しかし、1ファイル1080バイト必要とするため、最大で524288×1080/1000000=566MB(=540MiB)の容量を必要とし、メモリーを圧迫する可能性があります。

ファイル数を指定する目安として、ファイル524288個で566MBなのでメモリー1MBで約1000個のファイルを扱えます。

私のVPSはメモリー1GBのプランなので1GBの5%の50MBを最大値とし、ファイル数を50000個に指定しました。

fs.inotify.max_user_watches=50000

最後に以下を実行し、設定を有効にします。

sudo sysctl -p

以上で、私の環境ではこのWarningが発生しなくなりました。それぞれの環境に応じて最大値を調整してください。

11.接続後の作業

この後、Pythonを実行するためには、使用する仮想環境の指定とLint機能の実装です。これらについては、以下の記事を参照して下さい。

VS CodeでSSH接続。Pythonの仮想環境、lint機能。

私が実際にレンタルしたVPSサーバー

私が実際にレンタルしたVPSサーバーはConoHa VPSです。私は1GBのプランを申し込みました。VPSサーバーは一般のレンタルサーバーと異なりOSやアプリケーションを自由に設定できるので、Pythonで計算した結果をサイトに表示したりすることもできます。

なお、ConoHa VPSの特長として、サーバーのディスクイメージを丸ごとバックアップできるイメージ保存機能を無料で使用することができます。コードを変更して元に戻せなくなった場合にも安心です。

また、ConoHa VPSは途中でプランをスケールアップできるだけでなく、スケールダウンすることもできます。つまり、2Gプランを1Gプランに変更することができます。ただし、512MBプランだけはスケールアップ・ダウン機能が使用できないので注意してください。

また、初期費用なしで3日だけ借り、3日分の費用だけ払うといったことも可能なので気軽に始められます。※時間課金(月の上限額は決まっています)



その他

Twitterへのリンクです。SNSもはじめました♪

以下、私が光回線を導入した時の記事一覧です。
 (1) 2020年「光回線は値段で選ぶ」では後悔する ←宅内工事の状況も説明しています。
 (2) NURO光の開通までWiFiルーターを格安レンタルできる
 (3) NURO光の屋外工事の状況をご紹介。その日に開通!
 (4) 光回線開通!実測するとNURO光はやっぱり速かった
 (5) ネット上のNURO光紹介特典は個人情報がもれないの?