- 記事一覧 >
- ブログ記事
VS CodeでRaspberry Pi DesktopへSSH接続しようとしたらエラーになった
WindowsのVS Code(Visual Studio Code)→Raspberry Pi Desktop OS とSSHリモートデバッグをしようとしたら、エラーになりました。
SSHリモートデバッグだけの場合、情報は数多ありますが、この組み合わせの情報が少なかったので、エラー内容と解決方法を書きたいと思います。
ついでに、PythonプログラムをSSHリモートデバッグができるまで手順を解説します。
【エラーになった環境】
「Raspberry Pi OSをVMware-workstation-16.1.1にインストール」でインストールした環境です。
# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 10 (buster)
Release: 10
Codename: buster
# uname -a
Linux raspberry 4.19.0-13-amd64 #1 SMP Debian 4.19.160-2 (2020-11-28) x86_64 GNU/Linux
# cat /etc/debian_version
10.7
PC(x86_64)用のOSで、ARMアーキテクチャの本体のOSではない方です。
Raspberry 4 本体の方は、Raspberry Pi Imagerで書き込んだ"Rapsberry Pi OS (32bit)"ですが、こちらは、問題ありませんでした。エラーのところを読み飛ばせば、以降の手順そのままでできます。
【Raspberry 4 本体】
# lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 10 (buster)
Release: 10
Codename: buster
# uname -a
Linux raspberrypi 5.10.17-v7l+ #1414 SMP Fri Apr 30 13:20:47 BST 2021 armv7l GNU/Linux
# cat /etc/debian_version
10.9
【検証環境】
Raspberry Pi Desktop OS(詳細は、上記)
Windows 10 Pro 20H2(x64)
Visual Studio Code 1.59.0
Remote Development v0.21.0
Remote - Containers v0.191.0
Remote - SSH v0.65.7
Remote - SSH: Editing Configuration Files v0.65.7
Remote - WSL v0.58.2
Python 3.7.3
エラー内容・原因・解決方法
エラー内容・原因・解決方法だけ手短に先に記載します。
エラー内容
Could not establish connection to "192.168.11.9": The VS Code Server failed to start.
とアラートが表示されて、SSH接続に失敗します。
ログをcatすると、node: not found
のエラーです。
# cat /home/pi/.vscode-server/.379476f0e13988d90fab105c5c19e7abc8b1dea8.log
/home/pi/.vscode-server/bin/379476f0e13988d90fab105c5c19e7abc8b1dea8/server.sh: 12: /home/pi/.vscode-server/bin/379476f0e13988d90fab105c5c19e7abc8b1dea8/server.sh: /home/pi/.vscode-server/bin/379476f0e13988d90fab105c5c19e7abc8b1dea8/node: not found
原因
エラー文言からnodeプログラムが存在しないように思えますが、存在します。
nodeの共有ライブラリが見つからないことが原因です。
解決方法
$ sudo apt-get install gcc-multilib
により、共有ライブラリがインストールされて、正常に接続できるようになります。
SSH接続拡張機能インストール
ここでは、ソースコードが
192.168.11.9 の /home/pi/wiringpi-python-bme280
にあるものとします。
※192.168.11.9は、Python3が最初からインストールされていて、User:piでSSH接続できる環境を前提とします。
Windows側のユーザー名は、"admin"とします。
VS Codeは、Visual Studio Code 1.59.0
がインストール済みで、拡張機能として、Japanese Language Pack for Visual Studio Code v1.59.3
だけインストールされているものとします。
拡張機能のアイコンをクリックして、検索欄に「remote development」と入力します。
「Remote Development」をクリックして、「インストール」をクリックします。
「remote development」の入力を削除すると、インストール済みの拡張機能が表示されます。
「Remote Develop」は、何か機能を持っているわけではなく、下記4つの「Remote - *」をまとめてインストールしてくれるものです。
「Remote - SSH」は、今回使うものです。
「Remote - SSH: Editing Configuration」は、ssh設定ファイルの構文色付け自動補完入力をしてくれるようですので、実質「Remote - SSH」とセットになります。
「Remote - Containers」は、コンテナ(Docker)が接続先のときに必要ですので、今回は必要ありません。(アンインストールしても良いですが、ディスク消費容量が少ないため、このままにします。)
「Remote - WSL」は、WSL(Windows Subsystem for Linux = ざっくり言うと、Windows内に起動するLinux)が接続先のときに必要ですので、今回は必要ありません。(アンインストールしても良いですが、ディスク消費容量が少ないため、このままにします。)
左下の緑色のところをクリックして、「Connect to Host...」をクリックします。
※「Connect to Host...」の場合、接続時に新規ウィンドウが開きます。「Connect Current Window to Host...」の場合、現在のウィンドウのまま接続動作に入ります。どちらでも構いません。
「+Add New SSH Host...」をクリックします。
ssh pi@192.168.11.9
のようにSSH接続するときのコマンドを入力します。
C:\Users\admin\.ssh\config
をクリックします。
※接続先の情報を覚えておくファイルです。(Windowsの)ユーザーごとに保存するか全員で共有するかの意味になります。
「Linux」をクリックします。
※SSH接続先のプラットフォームの選択です。
接続先のパスワード(この場合、"pi"ユーザのパスワード)を入力して、エンターキーを押します。
接続先に VS Code Server がインストールされるため、少し時間がかかります。
インストール先は、今回の場合、/home/pi/.vscode-server です。
※接続エラーに関心が無い場合、「ソースコード表示」に進んでください。
接続エラー詳細
状況
他のOSのサーバーでは特に問題無かったのですが、エラーになって、接続できません。
# cat /home/pi/.vscode-server/.379476f0e13988d90fab105c5c19e7abc8b1dea8.log
/home/pi/.vscode-server/bin/379476f0e13988d90fab105c5c19e7abc8b1dea8/server.sh: 12: /home/pi/.vscode-server/bin/379476f0e13988d90fab105c5c19e7abc8b1dea8/server.sh: /home/pi/.vscode-server/bin/379476f0e13988d90fab105c5c19e7abc8b1dea8/node: not found
ログを見ると、node: not found
となっています。
/home/pi/.vscode-server はVS Codeがインストールした(送り込んだ)サーバー側プログラムとデータです。
画面出力は以下のようになっていました。
・出力内容
クリックして出力内容を表示
[19:03:54.237] Log Level: 2
[19:03:54.255] remote-ssh@0.65.7
[19:03:54.255] win32 x64
[19:03:54.257] SSH Resolver called for "ssh-remote+192.168.11.9", attempt 1
[19:03:54.258] "remote.SSH.useLocalServer": false
[19:03:54.258] "remote.SSH.showLoginTerminal": false
[19:03:54.259] "remote.SSH.remotePlatform": {}
[19:03:54.259] "remote.SSH.path": undefined
[19:03:54.259] "remote.SSH.configFile": undefined
[19:03:54.259] "remote.SSH.useFlock": true
[19:03:54.259] "remote.SSH.lockfilesInTmp": false
[19:03:54.260] "remote.SSH.localServerDownload": auto
[19:03:54.260] "remote.SSH.remoteServerListenOnSocket": false
[19:03:54.260] "remote.SSH.showLoginTerminal": false
[19:03:54.260] "remote.SSH.defaultExtensions": []
[19:03:54.260] "remote.SSH.loglevel": 2
[19:03:54.261] SSH Resolver called for host: 192.168.11.9
[19:03:54.261] Setting up SSH remote "192.168.11.9"
[19:03:54.292] Using commit id "379476f0e13988d90fab105c5c19e7abc8b1dea8" and quality "stable" for server
[19:03:54.295] Install and start server if needed
[19:04:01.702] Checking ssh with "ssh -V"
[19:04:01.741] > O
[19:04:01.741] > penSSH_for_Windows_8.1p1, LibreSSL 3.0.2
[19:04:01.746] Running script with connection command: ssh -T -D 57896 "192.168.11.9" bash
[19:04:01.749] Terminal shell path: C:\WINDOWS\System32\cmd.exe
[19:04:01.975] > 0;C:\WINDOWS\System32\cmd.exe
[19:04:01.975] Got some output, clearing connection timeout
[19:04:02.048] > pi@192.168.11.9's password:
[19:04:02.049] Showing password prompt
[19:04:04.300] Got password response
[19:04:04.301] "install" wrote data to terminal: "********"
[19:04:04.326] >
[19:04:04.428] > 220bcc8ae6cb: running
[19:04:04.454] > Acquiring lock on /home/pi/.vscode-server/bin/379476f0e13988d90fab105c5c19e7abc8
> b1dea8/vscode-remote-lock.pi.379476f0e13988d90fab105c5c19e7abc8b1dea8
[19:04:04.474] > Found existing installation at /home/pi/.vscode-server/bin/379476f0e13988d90fab1
> 05c5c19e7abc8b1dea8...
> Checking /home/pi/.vscode-server/.379476f0e13988d90fab105c5c19e7abc8b1dea8.log a
> nd /home/pi/.vscode-server/.379476f0e13988d90fab105c5c19e7abc8b1dea8.pid for a r
> unning server
> Looking for server with pid: 6779
> Starting server with command... /home/pi/.vscode-server/bin/379476f0e13988d90fab
> 105c5c19e7abc8b1dea8/server.sh --start-server --host=127.0.0.1 --enable-remote-a
> uto-shutdown --port=0 &> "/home/pi/.vscode-server/.379476f0e13988d90fab105c5c1
> 9e7abc8b1dea8.log" < /dev/null
> printenv:
> SHELL=/bin/bash
> LANGUAGE=ja_JP.UTF-8
> PWD=/home/pi
> LOGNAME=pi
> XDG_SESSION_TYPE=tty
> HOME=/home/pi
> LANG=ja_JP.UTF-8
> VSCODE_AGENT_FOLDER=/home/pi/.vscode-server
> SSH_CONNECTION=192.168.11.6 57898 192.168.11.9 22
> XDG_SESSION_CLASS=user
> USER=pi
> SHLVL=0
> XDG_SESSION_ID=13
> XDG_RUNTIME_DIR=/run/user/1000
> SSH_CLIENT=192.168.11.6 57898 22
> LC_ALL=ja_JP.UTF-8
> PATH=/usr/local/bin:/usr/bin:/bin:/usr/games
> DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
> MAIL=/var/mail/pi
> _=/usr/bin/printenv
> Spawned remote server: 8205
> Waiting for server log...
[19:04:04.485] >
[19:04:04.514] > Waiting for server log...
[19:04:04.548] > Waiting for server log...
・・・
[19:04:12.216] > Waiting for server log...
[19:04:12.232] >
[19:04:12.257] > Waiting for server log...
[19:04:12.283] >
> *
> * Reminder: You may only use this software with Visual Studio family products,
> * as described in the license (https://go.microsoft.com/fwlink/?linkid=2077057)
> *
>
> Server did not start successfully. Full server log at /home/pi/.vscode-server/.3
[19:04:12.291] >
> 79476f0e13988d90fab105c5c19e7abc8b1dea8.log >>>
> /home/pi/.vscode-server/bin/379476f0e13988d90fab105c5c19e7abc8b1dea8/server.sh:
> 12: /home/pi/.vscode-server/bin/379476f0e13988d90fab105c5c19e7abc8b1dea8/server.
> sh: /home/pi/.vscode-server/bin/379476f0e13988d90fab105c5c19e7abc8b1dea8/node: n
> ot found
> <<< End of server log
> 220bcc8ae6cb: start
> exitCode==32==
> listeningOn====
> osReleaseId==debian==
> arch==x86_64==
> tmpDir==/run/user/1000==
[19:04:12.295] >
> platform==linux==
> unpackResult====
> didLocalDownload==0==
> downloadTime====
> installTime====
> extInstallTime====
> serverStartTime==7810==
> 220bcc8ae6cb: end
[19:04:12.295] Received install output:
exitCode==32==
listeningOn====
osReleaseId==debian==
arch==x86_64==
tmpDir==/run/user/1000==
platform==linux==
unpackResult====
didLocalDownload==0==
downloadTime====
installTime====
extInstallTime====
serverStartTime==7810==
[19:04:12.296] Resolver error: Error: The VS Code Server failed to start
at Function.ServerInstallError (c:\Users\admin\.vscode\extensions\ms-vscode-remote.remote-ssh-0.65.7\out\extension.js:1:64593)
at c (c:\Users\admin\.vscode\extensions\ms-vscode-remote.remote-ssh-0.65.7\out\extension.js:1:58918)
at Object.t.handleInstallOutput (c:\Users\admin\.vscode\extensions\ms-vscode-remote.remote-ssh-0.65.7\out\extension.js:1:63335)
at Object.t.tryInstall (c:\Users\admin\.vscode\extensions\ms-vscode-remote.remote-ssh-0.65.7\out\extension.js:1:415135)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at async c:\Users\admin\.vscode\extensions\ms-vscode-remote.remote-ssh-0.65.7\out\extension.js:1:294918
at async Object.t.withShowDetailsEvent (c:\Users\admin\.vscode\extensions\ms-vscode-remote.remote-ssh-0.65.7\out\extension.js:1:406463)
at async Object.t.resolve (c:\Users\admin\.vscode\extensions\ms-vscode-remote.remote-ssh-0.65.7\out\extension.js:1:295994)
at async c:\Users\admin\.vscode\extensions\ms-vscode-remote.remote-ssh-0.65.7\out\extension.js:127:110656
[19:04:12.303] ------
[19:04:13.676] "install" terminal command done
[19:04:13.677] Install terminal quit with output:
確認・試したこと
・/home/pi/.vscode-server/bin/379476f0e13988d90fab105c5c19e7abc8b1dea8/node が無い?
→No
$ cd /home/pi/.vscode-server/bin/379476f0e13988d90fab105c5c19e7abc8b1dea8
$ ls -l
合計 72220
-rw-r--r-- 1 pi pi 13380 8月 5 08:12 LICENSE
drwxr-xr-x 3 pi pi 4096 8月 5 08:13 bin
drwxr-xr-x 34 pi pi 4096 8月 5 08:13 extensions
-rwxr-xr-x 1 pi pi 73873984 8月 5 08:13 node
drwxr-xr-x 75 pi pi 4096 8月 5 08:13 node_modules
drwxr-xr-x 3 pi pi 4096 8月 5 08:13 out
-rw-r--r-- 1 pi pi 1116 8月 5 08:12 package.json
-rw-r--r-- 1 pi pi 34776 8月 5 08:12 product.json
-rwxr-xr-x 1 pi pi 222 8月 5 08:12 server.sh
・nodeを直接実行
→「そのようなファイルやディレクトリはありません」英語:
$ ./node
-bash: ./node: No such file or directory
日本語:
$ ./node
-bash: ./node: そのようなファイルやディレクトリはありません
・server.shを直接実行
→./server.sh: 12: ./server.sh: ./node: not found
$ ./server.sh
./server.sh: 12: ./server.sh: ./node: not found
・nodeをインストールして入れ替えてみる。
→NG(先に進んだように見えて、接続先ディレクトリが見えませんでした。)
# apt update -y
# curl -fsSL https://deb.nodesource.com/setup_current.x | bash -
# apt install -y nodejs
# node -v
v10.24.0
# which node
/usr/bin/node
# vi ./.vscode-server/bin/379476f0e13988d90fab105c5c19e7abc8b1dea8/server.sh
"$ROOT/node" ${INSPECT:-} "$ROOT/out/vs/server/main.js" "$@"
↓
/usr/bin/node ${INSPECT:-} "$ROOT/out/vs/server/main.js" "$@"
・nodeをインストールしてシンボリックリンクにして入れ替えてみる。
→NG(先に進んだように見えて、接続先ディレクトリが見えませんでした。)
※"$ROOT/node" ${INSPECT:-} "$ROOT/out/vs/server/main.js" "$@"
に戻し後
$ cd /home/pi/.vscode-server/bin/379476f0e13988d90fab105c5c19e7abc8b1dea8
$ mv node node.bak
$ ln -s /usr/bin/node node
$ ls -l node
lrwxrwxrwx 1 root root 13 8月 15 20:36 node -> /usr/bin/node
原因
ここ と ここ で言っていることと同じなのですが、nodeの共有ライブラリが見つからないのが原因になります。
$ file node
node: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=c30982e8224bcd8b307b63f48132d7dd96e1a12b, with debug_info, not stripped
英語:
$ ldd node
not a dynamic executable
日本語:
$ ldd node
動的実行ファイルではありません
解決方法
共有ライブラリをインストールしたら、その時点から問題無くなりました。
結果、1行で解決です。
$ sudo apt-get install gcc-multilib
確認すると・・・
$ ldd node
linux-vdso.so.1 (0x00007fff8c7db000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f2757efa000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f2757d76000)
libm.so.6 => /lib64/libm.so.6 (0x00007f2757bf3000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f2757bd9000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f2757bb8000)
libc.so.6 => /lib64/libc.so.6 (0x00007f27579f7000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2757f19000)
$ ./node
Welcome to Node.js v14.16.0.
Type ".help" for more information.
>
/home/pi/.vscode-server/bin/379476f0e13988d90fab105c5c19e7abc8b1dea8/node
がちゃんと反応するようになりました。
v14.16.0
だったようです。
node v14について
node v14をインストールしようとしたら、同じような対処が必要でした。
# curl -fsSL https://deb.nodesource.com/setup_14.x | bash -
# sudo apt-get install -y nodejs
# node -v
v10.24.0
↓
v14にならないので、nコマンドでインストール
↓
# apt install node.js npm
# npm i -g n yarn
# n install 14.16.0
installing : node-v14.16.0
mkdir : /usr/local/n/versions/node/14.16.0
fetch : https://nodejs.org/dist/v14.16.0/node-v14.16.0-linux-x64.tar.xz
/usr/local/bin/n: 行 731: /usr/local/bin/node: そのようなファイルやディレクトリはありません
installed : (with npm 6.14.11)
Note: the node command changed location and the old location may be remembered in your current shell.
old : /usr/bin/node
new : /usr/local/bin/node
To reset the command location hash either start a new shell, or execute PATH="$PATH"
# node -v
v10.24.0
↓
パスを通し直していないから、何も変わらなかった。パスを通して、再実行。
↓
# PATH="$PATH"
# node -v
bash: /usr/local/bin/node: そのようなファイルやディレクトリはありません
# /usr/local/bin/node -v
bash: /usr/local/bin/node: そのようなファイルやディレクトリはありません
⇒VS Codeのときのように、存在するのに「そのようなファイルやディレクトリはありません」になりました。
最初にgcc-multilib
をインストールした場合
# apt-get install gcc-multilib
# curl -fsSL https://deb.nodesource.com/setup_14.x | bash -
# sudo apt-get install -y nodejs
# node -v
v10.24.0
# apt install node.js npm
# npm i -g n yarn
# n install 14.16.0
# node -v
v10.24.0
# PATH="$PATH"
# node -v
v14.16.0
⇒v14になりました。
ソースコード表示
しばらくすると、左下の表示が「SSH: 192.168.11.9」のように接続先の表示に変わります。
「エクスプローラー」アイコンをクリックして、"リモートに接続されています。"の下の「フォルダーを開く」ボタンをクリックします。
開きたいディレクトリ(今回の場合は、/home/pi/wiringpi-python-bme280)を選択して、「OK」ボタンをクリックします。
接続先のパスワード(この場合、"pi"ユーザのパスワード)を入力して、エンターキーを押します。
左側ファイルツリーでファイルを選択して、サーバー(192.168.11.9)のファイルを閲覧、編集できます。
SSH鍵の設定
先ほど、接続する時、ディレクトリを開くときにパスワード入力がありましたが、これを無くします。
cmd.exeを開いて、ssh-keygenコマンドを入力します。
プロンプトは、全て何も入力せずエンターキーです。
(特にEnter passphraseのところは、パスワード無しでSSH鍵を作成したいため。)
C:\Users\admin>ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\admin/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\admin/.ssh/id_rsa.
Your public key has been saved in C:\Users\admin/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:2wnfXYUhsDkW78InNqiT4/m11rQJ9i+lvDQN1dbYqQQ admin@WIN10PRO64
The key's randomart image is:
+---[RSA 2048]----+
| oE. . |
| =.. *o|
| = ..+.*|
| + o.....|
| S * +. .|
| o *oB.+.. |
| = ..=*+=o |
| . + ..oO. |
| o.... .+. |
+----[SHA256]-----+
秘密鍵:C:\Users\admin\.ssh\id_rsa
公開鍵:C:\Users\admin\.ssh\id_rsa.pub
が作成されました。
※adminは、Windowsのユーザー名です。
公開鍵:C:\Users\admin\.ssh\id_rsa.pub
の方を
>scp C:\Users\admin\.ssh\id_rsa.pub pi@192.168.11.9:~/.
のように、接続先へ転送します。
注意:~/. は接続先home(この場合/home/pi/)直下に置く意味です。
接続先サーバーでディレクトリを作成して、公開鍵を配置、パーミッションを調整します。
※.ssh ディレクトリが既に有る場合も考えられますが、今回は、インストール直後のため、無い場合になります。
$ cd /home/pi
$ mkdir .ssh
$ cat id_rsa.pub > .ssh/authorized_keys
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys
これでVS Codeで192.168.11.9へもう一度接続すると、何も聞かれずに、接続されます。
C:\Users\admin\.ssh\id_rsa
の秘密鍵を使用
↓ssh pi@192.168.11.9
↓/home/pi/.ssh/authorized_keys
の公開鍵を使用
とC:\Users\接続元ユーザー名\.ssh\id_rsa
/home/接続先ユーザー名/.ssh/authorized_keys
がデフォルトで決まっています。
接続できない場合、
Windows側:C:\Users\admin\.ssh\config
サーバー側:/etc/ssh/sshd_config
等々、触らないといけないと思いますが、状況次第だと思いますので、ここでは割愛します。
Pythonデバッグ
拡張機能のアイコンをクリックして、検索欄に「Python」と入力します。
「Python」をクリックして、「SSH: 192.168.11.9 にインストールする」をクリックします。
この場合、192.168.11.9の /home/pi/.vscode-server/ へPythonの入力補完機能、構文チェック機能、デバッグ機能等インストールされます。
Pythonはインストール済みですので、「ようこそ」の画面は閉じます。
デバッグしたいPythonソースコードを表示後、F5キーを押して、「Python File」を選択します。
動きました。
これだけでしたら、ここまでする必要は無いですが・・・
今回は、デバッグできるようになるまでということで、設定、使い方には言及せず、ここまでにします。
できました!
その他、宣伝、誹謗中傷等、当方が不適切と判断した書き込みは、理由の如何を問わず、投稿者に断りなく削除します。
書き込み内容について、一切の責任を負いません。
このコメント機能は、予告無く廃止する可能性があります。ご了承ください。
コメントの削除をご依頼の場合はTwitterのDM等でご連絡ください。