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です。
0.VPSサーバーでDjangoを始めてみたシリーズ
この記事は「VPSサーバーでDjangoを始めてみたシリーズ」の記事です。一連の記事は、以下のリンク集を参照してください。
1.VS Codeのインストール
「Visual Studio Codeのダウンロード」からインストールファイルをダウンロードし、VS Codeをインストールします。
2.拡張機能のインストール
サーバーとのSSH接続の設定は完了しているものとします。まだの場合は以下のリンクから必要な記事を参照してください。
Django♪VPSサーバーでDjangoを始めてみたシリーズ
VS Code起動したら、以下の拡張機能をインストールします。
- Japanese Language Pack for Visual Studio Code
- Remote Development
サーバーの環境で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です。拡張子はありません。以下、VS Codeを使ってローカルPCのconfigファイルの内容を書き換え、接続の設定を指定します。
(1) SSH接続設定ファイルの表示
左下の歯車マークから「コマンドパレット」を選択します。コマンドパレットはショートカットキー「F1」あるいは「Ctrl+Shift+P」でも起動できます。
そして、コマンドパレットに「Remote-SSH: Open SSH 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ファイルの内容が表示されます。
次に書き換えるときには同じ手順で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 #サーバに接続信号を送る間隔(秒)
なお、Linux上で複数のユーザーを作成し、ユーザーを選択してログインしたい場合は上記configファイルの後ろに同じ書式の設定を追記します。すると、後述のリモートエクスプローラで複数の接続名称が表示されるので、ログインしたい方をクリックします。
Host user1_connect #接続の名称(任意の名称)
HostName 254.254.254.254 #接続したいリモートサーバーのIPアドレス
User ユーザー名1 #Ubuntuで設定したユーザー名
Port 22 #SSH接続のポート番号を変更した場合には22以外の番号
IdentityFile C:\Users\秘密鍵の保存場所のパス\秘密鍵の名前
ServerAliveInterval 60 #サーバに接続信号を送る間隔(秒)
Host user2_connect #接続の名称(任意の名称)
HostName 254.254.254.254 #接続したいリモートサーバーのIPアドレス
User ユーザー名2 #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ファイルを書き換えて有効にする場合には、必ず「ファイル」→「保存」で設定内容を保存しましょう。
(4) configファイルのパス
先ほどSSH接続の内容を記述したconfigファイルのパスは任意のディレクトリに変更可能です。ただし、Cドライブ直下にフォルダを作成してconfigファイルを保存するのはセキュリティ上良くないので注意しましょう。
まず、自分の好みの場所にテキストエディタでconfigファイルを作成します。
次に拡張機能「Remote - SSH」の歯車のマークから「拡張機能の設定」を選択し、「Remote.SSH: Config File」という項目を探します。そして、項目の空欄にconfigファイルを作成したパスを指定します。なお、パスだけではなく、パスの最後にファイル名の「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クライアント」がインストールされている必要があります。
私の環境では最初からインストールされていました。
なお、Windows11の場合は、「スタートメニュー」→「設定」→「アプリ」→「オプション機能」→「機能を表示」→「OpenSSHサーバー」→「次へ」→「インストール」です。
(3) 使えない鍵の種類がある
WindowsのVS Codeの拡張機能ではOpenSSHを使って鍵認証を行います。ターミナルクライアントソフトにPuTTYを使っている場合には、PuTTYで作成した鍵の形式を認識できません。
Windows10では鍵を作成するコマンドがありますが、Tera Termで作成した鍵も使えるので私は以下の方法で鍵を作成しました。
ConoHa VPSにUbuntu。スタートアップガイドの読み方。
(4) 秘密鍵のパスフレーズは設定できる?
VS-Codeでも秘密鍵のパスフレーズを利用できます。秘密鍵を作成するときにパスフレーズを設定していれば、VS-Codeからアクセスするときにそのパスフレーズを入力します。
セキュリティ向上のため、できるだけパスフレーズ付の秘密鍵を使いましょう。
5.ターミナルをいつも表示する
接続先でLinuxサーバーのターミナルがいつも表示された状態になるように設定します。まず、拡張機能のボタンを押したあと、拡張機能Remote SSHの右の①歯車マークをクリック、②拡張機能の設定を選択します。そして、「Remote SSH:Show Login Terminal」の「Always reveal login terminal」にチェックを入れます。
こうすることで、リモートサーバーに接続後にサーバーを操作するターミナルが絶えず開いた状態になるため操作しやすくなります。
ここにチェックを入れていないと、このあとの画面表示や設定の手順が少し変わってしまいます。
以上で、接続前の設定は終了です。
6.リモートサーバ-への接続
いよいよ、リモートサーバーに接続します。左側の①リモートエクスプローラーのボタンをクリックし、先ほどconfigファイルで設定した「test_connect(下の図ではtest_user)」の右側の②「Connect to Host in New Window 」のボタンをクリックします。
なお、test_connectが表示されない場合は、その上側にある「リモートエクスプローラー」の右のプルダウンメニューから「SSH Targets」を選択してください。
※接続名称はtest_userよりもtest_connectの方がしっくりくるため、この記事の本文だけtest_connectに書き換えました。以下、図中のtest_userはtest_connectと読み替えて下さい。
すると、別のウィンドウでVS Codeが起動します。サーバーのOSの種類を聞かれるのでLinuxを選択します。なお、OSの選択に時間をかけすぎるとドロップダウンリストが消え、エラーになるので慌てず速やかに選択しましょう。
消えた場合は、もう一度SSHに接続するところからやり直せば大丈夫です。
Linux選択直後に以下の様なメッセージが表示されることがありますが、これは「OSの種類を保存したので、変更したいときにはRemote.SSH: Remote Platformを使うように」という意味です。
選択したOSの設定はローカル環境Windows10の「C:\Users\ユーザー名\AppData\Roaming\Code\User\settings.json」に保存されます。また、「左下の歯車」→「設定」からコマンド「Remote.SSH: Remote Platform」を検索し、OSを変更することができます。
なお、「左上のファイル」→「ユーザー設定」→「設定」でも、「左下の歯車」→「設定」でも同じ設定画面を立ち上げることができます。
さて、サーバーのOSを選択しEnterキーを押すと、下部のターミナルで「yes/no」を問われますので「yes」と入力します。「y」だけではダメです。
Are you sure you want to continue connecting (yes/no/[fingerprint])?
ここでは、「始めて接続するサーバーだけど大丈夫?」と聞かれています。そして、「yes」を選択すると、「ECDSA key fingerprint」つまり、サーバーの指紋のような記号が自分のpcの中の「known_hosts」という名前のファイルに保存されます。次のログインからは聞かれません。「known_hosts」はconfigファイルと同じ「c:\User\ユーザー名\.ssh\known_hosts」に保存されます。
ここでも、時間をかけすぎると接続できず、以下のようなエラーになりますが、その場合はCloase 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/ユーザー名/」が入力されていますが、実際に使用する場合には使用する仮想環境のディレクトリを指定すると使いやすいと思います。
再び秘密鍵のパスフレーズを問われるのでパスフレーズを入力します。
パスフレーズが承認され、ターミナルの最後の行に「:end」と表示されます。そして、左側には開いたサーバーのディレクトリ内部が表示されます。
なお、右下に「この大規模なワークスペースでのファイルの変更をウォッチできません。この問題を解決するには、手順のリンクに従ってください。」というWarningが表示されますが、一旦、無視しましょう。後で対応します。
ターミナルの右上の「2.install」と表示されたドロップダウンウィンドウを「1.bash」に切り替えます。
ただ、時々「1.install」となり、「bash」が選択子にない場合があります。その場合は右隣の「+」をクリックし、ターミナルに「bash」を追加してください。
ターミナルの表示が切り替わり、Tera Termなどのターミナルクライアントソフトで表示されるのと同じようにサーバーのコンソール画面が表示されます。これで接続完了です。
10.ワーニング「この大規模なワークスペース・・・」
さて、後回しにした以下のWarningについて対応したいと思います。
これは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日分の費用だけ払うといったことも可能なので気軽に始められます。※時間課金(月の上限額は決まっています)
私からの友達紹介でクーポンをゲット
なお、以下のリンクから入ると、私からの友達紹介の扱いとなり1000円分のクーポンが支給されます。リンク先には「友達紹介」といった表記がないので「友達紹介」が適用されているのか不安になりますが大丈夫です。登録終了後にログインしたユーザーTop画面を確認すると支給されたクーポン1000円が表示されるはずです。
なお、友達紹介では個人情報が紹介者には開示されないので安心してご利用ください。
その他
液晶ペンタブレットを購入しました
(1) モバイルディスプレイを買うつもりだったのに激安ペンタブレット購入
以下、私が光回線を導入した時の記事一覧です。
(1) 2020年「光回線は値段で選ぶ」では後悔する ←宅内工事の状況も説明しています。
(2) NURO光の開通までWiFiルーターを格安レンタルできる
(3) NURO光の屋外工事の状況をご紹介。その日に開通!
(4) 光回線開通!実測するとNURO光はやっぱり速かった
(5) ネット上のNURO光紹介特典は個人情報がもれないの?