目次
- はじめに
- 今回の導入環境
- 今回作る構成
- 1. 事前にPowerShellからSSH接続を確認する
- 2. Remote - SSH拡張機能をインストールする
- 3. VS CodeからLIFEBOOKへ接続する
- 4. 接続先OSとしてLinuxを選択する
- 5. VS Code Serverの初期化を待つ
- 6. Remote - SSH接続を確認する
- 7. リモート側のフォルダを開く
- 今回躓いたポイント
- Remote - SSHログから切り分ける
- 切り分けの時系列
- 補足:Windows修復後に接続設定が消えた場合
- まとめ
- 参考資料
- 関連記事
はじめに
メインPCのDELLでフリーズやWSL切断などの不調が発生し、原因調査や修理中も開発を止めないため、以前使っていた古いLIFEBOOKをUbuntu開発機として再利用しています。
シリーズ第1回ではLIFEBOOKへ Ubuntu 24.04.4 LTS Desktop をインストールし、第2回では OpenSSH Server・公開鍵認証・UFW まで構築しました。
第2回で、WindowsのPowerShellからは次のコマンドだけでLIFEBOOKへSSH接続できる状態になっています。
ssh lifebook
今回の第3回では、このSSH接続を Visual Studio CodeのRemote - SSH拡張機能 から利用し、Windows上のVS Codeを操作画面として使いながら、実際のファイル操作やターミナル処理をLIFEBOOK上で行えるようにします。
最終的なイメージは次のとおりです。
メインPC(Windows)
│
│ Visual Studio Code
│ Remote - SSH
│ SSH公開鍵認証
▼
LIFEBOOK
Ubuntu 24.04.4 LTS Desktop
│
├─ VS Code Server
├─ Git
├─ Docker Engine
└─ Laravel / Sail
Visual Studio Code公式では、Remote - SSHで接続する前に、ターミナルやPowerShellから対象SSHホストへ接続できることを確認する手順になっています。
今回は第2回で ssh lifebook まで確認済みの状態から開始します。
今回の導入環境
| 項目 | 内容 |
|---|---|
| リモートPC | 富士通 LIFEBOOK AH52/C |
| 型名 | FMVA52CBJ |
| CPU | Intel Pentium P6200 2.13GHz |
| メモリ | 8GB |
| ストレージ | 256GB SSD |
| リモートOS | Ubuntu 24.04.4 LTS Desktop |
| アーキテクチャ | x86_64 |
| Ubuntuユーザー | honta |
| 接続元 | WindowsメインPC |
| Windows側IPv4 | 192.168.11.2 |
| LIFEBOOK側IPv4 | 192.168.11.9/24 |
| 接続方式 | 家庭内Wi-Fi / LAN |
| 作業時VS Code | 1.133.0 |
| 作業時Remote - SSH | 0.128.0 |
| Windows OpenSSH Client | OpenSSH_for_Windows_9.5p2 |
| SSHホスト名 | lifebook |
作業時のRemote - SSHログでは、Windows x64版VS CodeからLIFEBOOKのLinux環境へ接続していることを確認しました。
VS CodeやRemote - SSHのバージョンは更新されます。
この記事のバージョン番号は今回の実作業時点の記録です。操作名や画面表示が将来変わる可能性があるため、最新仕様はVisual Studio Code公式ドキュメントも確認してください。
今回作る構成
第2回でWindows側のSSH configを次のように設定済みです。
Host lifebook
HostName 192.168.11.9
User honta
IdentityFile ~/.ssh/id_ed25519_lifebook
IdentitiesOnly yes
Windowsの ssh-agent にLIFEBOOK専用のEd25519秘密鍵も登録済みです。
そのためRemote - SSHでは、IPアドレスやユーザー名を毎回入力せず、
lifebook
というSSHホスト名をそのまま利用できます。
VS Code
│
│ Remote-SSH: Connect to Host...
▼
lifebook
│
│ ~/.ssh/config
▼
192.168.11.9
│
│ SSH公開鍵認証
▼
Ubuntu / honta
1. 事前にPowerShellからSSH接続を確認する
Visual Studio Code公式では、Remote - SSHを使う前に、まず通常のSSHクライアントから接続できることを確認するよう案内されています。
今回も、Windows PowerShellで先に確認しました。
ssh lifebook
正常なら、
Welcome to Ubuntu 24.04.4 LTS ...
...
honta@lifebook-ubuntu:~$
まで入れます。
さらにTCP/22の疎通を切り分けたい場合は、
Test-NetConnection 192.168.11.9 -Port 22
も利用できます。
今回の正常時は、
TcpTestSucceeded : True
でした。
Remote - SSHで問題が発生した場合でも、最初からVS Codeの設定を変更するのではなく、まず通常の ssh lifebook が成功するか確認します。
PowerShellからもSSH接続できない場合、VS Codeより手前のネットワーク・OpenSSH Server・電源状態などを確認する必要があります。
2. Remote - SSH拡張機能をインストールする
Windows側のVisual Studio Codeを開きます。
拡張機能ビューは、
Ctrl + Shift + X
で開けます。
検索欄で、
Remote - SSH
を検索しました。
今回インストールしたのは Microsoft製のRemote - SSH拡張機能 です。
確認した識別子は、
ms-vscode-remote.remote-ssh
でした。
そのまま「インストール」を実行します。
Visual Studio Code公式ドキュメントでも、Remote - SSHを利用するための事前準備として、
- OpenSSH互換SSHクライアント
- Visual Studio Code
- Remote - SSH拡張機能
が案内されています。
3. VS CodeからLIFEBOOKへ接続する
Remote - SSHをインストールしたら、コマンドパレットを開きます。
Ctrl + Shift + P
次のコマンドを選択します。
Remote-SSH: Connect to Host...
接続先一覧に、第2回でSSH configへ登録した、
lifebook
が表示されたため選択しました。
Visual Studio Code公式では、SSH configに登録したホストは Remote-SSH: Connect to Host... の接続先として利用できます。
今回のWindows側SSH configは、
Host lifebook
HostName 192.168.11.9
User honta
IdentityFile ~/.ssh/id_ed25519_lifebook
IdentitiesOnly yes
なので、VS Code側でも lifebook を選ぶだけで同じ接続情報を利用できます。
4. 接続先OSとしてLinuxを選択する
初回接続時、VS Codeからリモートホストのプラットフォーム選択を求められました。
表示された選択肢から、
Linux
を選択しました。
接続先のLIFEBOOKは、
Ubuntu 24.04.4 LTS Desktop
なので、Linuxを選択します。
Visual Studio Code公式では、接続先プラットフォームを自動判定できない場合に手動選択を求められ、選択結果は remote.SSH.remotePlatform に保存されると説明されています。
ここで選択するのは、VS Codeを操作しているWindows側ではなく、接続先リモートホストのOSです。
今回の接続先はUbuntuなので Linux を選びました。
5. VS Code Serverの初期化を待つ
接続を開始すると、VS Code右下にリモートホストを設定している旨が表示されました。
今回の画面では、概ね次の状態になりました。
SSH ホスト lifebook を設定しています
VS Code Server を初期化中
Visual Studio Code公式では、Remote - SSHで接続するとリモート側にVS Code Serverがセットアップされ、ローカルのVS Codeと通信すると説明されています。
つまり、今回の構成は単純なファイル転送ではありません。
Windows側
Visual Studio Code
│
│ SSH
▼
LIFEBOOK側
VS Code Server
│
├─ ファイル操作
├─ ターミナル
├─ 拡張機能
└─ 開発処理
となります。
Remote - SSH接続後に開く統合ターミナルは、WindowsのPowerShellではなく、接続先LIFEBOOK上のシェルとして動作します。
Visual Studio Code公式でも、Remote - SSH接続後に新しく開いたターミナルはリモートホスト上で実行されると説明されています。
6. Remote - SSH接続を確認する
接続成功後、VS Code左下のステータスバーに、
SSH: lifebook
と表示されました。
これで現在のVS Codeウィンドウが、LIFEBOOKへRemote - SSH接続していることを確認できます。
さらにVS Codeの統合ターミナルを開きました。
Ctrl + `
今回のプロンプトは、
honta@lifebook-ubuntu:~$
となりました。
念のため、次のコマンドでも確認します。
hostname
whoami
pwd
期待する結果は、
lifebook-ubuntu
honta
/home/honta
です。
今回の実作業でも、
pwd
の結果が、
/home/honta
となることまで確認できました。
これで、
Windows上のVS Code
↓
Remote - SSH
↓
LIFEBOOK Ubuntu
↓
/home/honta
という開発経路が完成しました。
7. リモート側のフォルダを開く
Remote - SSH接続直後は、空のVS Codeウィンドウとして接続できます。
Visual Studio Code公式では、接続後に、
File > Open...
または、
File > Open Workspace...
からリモートホスト上のフォルダやWorkspaceを開けると案内されています。
例えば、今後LIFEBOOK上へGit cloneしたプロジェクトが、
/home/honta/projects/review-app-laravel
にある場合は、そのフォルダをRemote - SSH接続中のVS Codeから開く形になります。
この状態ではVS Codeの画面はWindows側にありますが、ファイルやターミナルはLIFEBOOK側を操作しています。
Windows
└─ VS Codeの画面・キーボード操作
│
│ SSH
▼
LIFEBOOK
├─ ソースコード
├─ Git
├─ Docker
└─ Laravel / Sail
このシリーズでは、Windows側へPHP等の開発環境を追加せず、Ubuntu実機側へDocker開発環境を構築する方針です。
Remote - SSHを使うことで、WindowsのVS Codeを使いながら、実際の開発処理はLIFEBOOK側へ寄せられます。
今回躓いたポイント
初回接続が Connection timed out になった
最初のRemote - SSH接続では失敗しました。
Remote - SSHログでは、Windows標準のOpenSSH Client自体は正常に検出されていました。
C:\WINDOWS\System32\OpenSSH\ssh.exe
OpenSSH_for_Windows_9.5p2
VS Codeは次のようなSSHコマンドで lifebook へ接続しようとしていました。
"C:\WINDOWS\System32\OpenSSH\ssh.exe" -T -D ... lifebook sh
しかし、その後、
ssh: connect to host 192.168.11.9 port 22: Connection timed out
となりました。
後続では、
Failed to parse remote port from server output
Resolver error: Error
も表示されていました。
この時点では、VS Code Serverのインストール失敗が原因とは判断しませんでした。
決定的だったのは、
ssh: connect to host 192.168.11.9 port 22: Connection timed out
です。
つまり、VS Code Serverより前の段階でSSH接続自体が成立していません。
原因はLIFEBOOKの自動サスペンド
LIFEBOOK本体を確認すると、自動サスペンドしていました。
つまり今回の実際の流れは、
PowerShellからSSH接続成功
↓
Remote - SSH設定開始
↓
LIFEBOOKをしばらく放置
↓
LIFEBOOKが自動サスペンド
↓
Wi-Fi / SSHへ到達できなくなる
↓
Remote - SSH
Connection timed out
でした。
OpenSSHやRemote - SSHの設定ミスではありませんでした。
Ubuntu側の電源設定を見直してLIFEBOOKを起こした後、Remote - SSHを再試行すると正常に接続できました。
Connection timed out は、Remote - SSH固有のエラーとは限りません。
今回のように、
- リモートPCがサスペンドしている
- ネットワークが切れている
- SSHポートへ到達できない
といった、VS Codeより手前の原因でも発生します。
内蔵Wi-Fiも不安定だった
このLIFEBOOKは、Ubuntu化する以前のWindows 10時代から最近Wi-Fiが不安定でした。
そのため、Remote - SSHでネットワークが不安定になった場合も、UbuntuやVS Codeだけを原因とは判断しませんでした。
開発サーバーとして継続利用するため、安定性を優先する場合は有線LAN化も検討しました。
これは今回使用したLIFEBOOKで確認できた事象です。
「Remote - SSHではWi-Fiが不安定になる」「Ubuntuだから不安定」という意味ではありません。
Remote - SSHログから切り分ける
Visual Studio Code公式では、接続時の詳細ログを Remote - SSH output channel で確認できると案内されています。
今回も、接続失敗時はログを確認しました。
ログ上で重要だったのは、次の順番です。
Remote - SSH開始
↓
Windowsのssh.exeを探索
↓
C:\WINDOWS\System32\OpenSSH\ssh.exe を検出
↓
OpenSSH_for_Windows_9.5p2 を確認
↓
lifebookへSSH接続を開始
↓
192.168.11.9:22 がタイムアウト
このため、
Remote - SSH拡張機能そのもの
VS Code Server
より前に、
Windows → LIFEBOOK:22
を確認するべきだと判断できました。
まずPowerShellで切り分ける
接続失敗時は、Windows PowerShellで、
Test-NetConnection 192.168.11.9 -Port 22
を確認できます。
さらに、
ssh lifebook
も試します。
切り分けは次のようになります。
ssh lifebook 成功
↓
Remote - SSH側のログ・設定を確認
ssh lifebook 失敗
↓
ネットワーク
OpenSSH Server
UFW
電源 / サスペンド
SSH config
などを先に確認
この順番にすると、VS Codeの設定を不要に変更せずに原因を絞り込めます。
切り分けの時系列
今回の作業を時系列でまとめます。
第2回でOpenSSH Server構築
↓
公開鍵認証を設定
↓
Windows ssh-agentへ鍵を登録
↓
SSH configへHost lifebookを登録
↓
PowerShell
ssh lifebook
成功
↓
Windows版VS Codeを起動
↓
Microsoft製Remote - SSHをインストール
↓
Ctrl + Shift + P
↓
Remote-SSH: Connect to Host...
↓
lifebookを選択
↓
接続先OSとしてLinuxを選択
↓
VS Code Server初期化
↓
Connection timed out
↓
Remote - SSHログ確認
↓
Windows OpenSSH Clientは検出済み
↓
192.168.11.9:22へのSSHがタイムアウト
↓
LIFEBOOK本体を確認
↓
自動サスペンドしていた
↓
LIFEBOOKを起こす
↓
電源設定を見直す
↓
Remote - SSHを再試行
↓
SSH: lifebook
↓
統合ターミナル
honta@lifebook-ubuntu:~$
↓
pwd
/home/honta
↓
Remote - SSH接続完了
補足:Windows修復後に接続設定が消えた場合
後日、メインPCのWindows修復後に、
ssh lifebook
が、
ssh: Could not resolve hostname lifebook: ...
となりました。
確認すると、
C:\Users\honta\.ssh
の内容が消えており、
- LIFEBOOK用秘密鍵
configknown_hosts
が失われていました。
ssh-agent も、
Stopped / Disabled
へ戻っていました。
ただし、
Test-NetConnection 192.168.11.9 -Port 22
は、
TcpTestSucceeded : True
だったため、LIFEBOOK側のOpenSSHではなく、Windows側SSHクライアント環境の消失と切り分けられました。
新しいEd25519鍵を発行し、LIFEBOOK側の authorized_keys を新しい公開鍵へ更新した後、
ssh-agent
~/.ssh/config
を復旧しました。
最終的に、
ssh lifebook
が再び成功したため、VS Codeから、
Remote-SSH: Connect to Host...
↓
lifebook
を選択してRemote - SSH接続も復旧できました。
Remote - SSHは、Windows側のSSH鍵やSSH configを利用します。
OS修復やユーザープロファイルの初期化後にRemote - SSHだけが突然使えなくなった場合は、VS Codeを再インストールする前に ~/.ssh と ssh-agent の状態も確認します。
まとめ
今回は、WindowsのVisual Studio CodeからRemote - SSHを使い、Ubuntu 24.04.4 LTSをインストールした古いLIFEBOOKへ接続しました。
実施した内容は次のとおりです。
- PowerShellの
ssh lifebookで事前接続確認 - Microsoft製Remote - SSH拡張機能をインストール
-
Remote-SSH: Connect to Host...からlifebookを選択 - 接続先プラットフォームに
Linuxを選択 - リモート側のVS Code Server初期化
- ステータスバーの
SSH: lifebookを確認 - 統合ターミナルがLIFEBOOK上で動いていることを確認
-
pwdが/home/hontaになることを確認
また、初回接続では、
ssh: connect to host 192.168.11.9 port 22: Connection timed out
となりましたが、Remote - SSHログを確認して切り分けた結果、原因はLIFEBOOK本体の自動サスペンドでした。
今回特に重要だったのは、
Remote - SSHで失敗
↓
VS Code設定をすぐ変更しない
↓
Remote - SSHログを確認
↓
PowerShellからTCP/22とSSHを確認
↓
リモートPC本体・ネットワークを確認
という順番で切り分けたことです。
これで、
Windows
↓
VS Code Remote - SSH
↓
LIFEBOOK Ubuntu
という開発経路が完成しました。
次回は Docker Engine構築編として、LIFEBOOKへDocker Engine / Docker Composeを導入し、Laravel / Sail等の開発環境を動かすための土台を作っていきます。
参考資料
Visual Studio Code公式:Remote Development using SSH
確認内容:
- Remote - SSHのインストール
- 接続前に通常のSSH接続を確認する手順
Remote-SSH: Connect to Host...- 接続先プラットフォームの選択
- VS Code Serverのセットアップ
- ステータスバーによる接続先確認
- リモート側フォルダ / Workspaceを開く方法
- リモート統合ターミナル
- SSH configの利用
- 公開鍵認証の推奨
公式記載:
Optional: While password-based authentication is supported, we recommend setting up key based authentication for your host.
Visual Studio Code公式:Remote Development Tips and Tricks
確認内容:
- Remote - SSHのトラブルシュート
- SSH Clientの検出
remote.SSH.path- Remote - SSHログの確認
- SSH configによる接続設定
- VS Code ServerとSSHトンネル
Visual Studio Code公式:Remote development over SSH
確認内容:
- Remote - SSH拡張機能
- ステータスバー
- 接続前の
ssh user@hostname確認 - VS Code Serverの初期化
- リモート統合ターミナル
- リモートフォルダを開く流れ
関連記事
このシリーズ
- 第1回:古いLIFEBOOKをUbuntu開発機にする【1. Ubuntu 24.04 LTSインストール編】
- 第2回:古いLIFEBOOKをUbuntu開発機にする【2. OpenSSH Server導入編】
- 第3回:古いLIFEBOOKをUbuntu開発機にする【3. VS Code Remote - SSH接続編】(この記事)
- 第4回:古いLIFEBOOKをUbuntu開発機にする【4. Docker Engine構築編】
- 第5回:古いLIFEBOOKをUbuntu開発機にする【5. Sambaファイルサーバ構築編】
- 第6回:古いLIFEBOOKをUbuntu開発機にする【6. VS Code導入・GPU対策編】
- 第7回:古いLIFEBOOKをUbuntu開発機にする【7. LibreOffice導入・動作検証編】
あわせて読みたい
-
WSL 2をバックアップして旧バージョンへ安全にin-place downgradeする手順
メインPC側のWSL不調を切り分け、Ubuntuを退避して安全にダウングレードした記録です。 -
WSL2上のUbuntuを安全にアップデートした記録【初心者向け】
UbuntuのAPT更新や不要パッケージ確認など、導入後のメンテナンスに関連する記事です。 -
Webバックエンド初心者向け Linuxコマンド基礎反復練習(Docker/Ubuntu)
UbuntuやDocker環境で使う基本的なLinuxコマンドを反復練習するための記事です。 -
Linux標準教科書 | LPI-Japan
Linuxの基本コマンド、ファイル管理、ユーザー・権限、ネットワークなどを体系的に学べる無償教材です。
私自身もポリテクセンターでLinux基礎を学んだ際に教科書として使用しました。 -
Linuxサーバー構築標準教科書 | LPI-Japan
Linuxサーバーの基礎から、Webサーバー、DNS、メール、ネットワーク・セキュリティまで実習形式で学べる無償教材です。
今回のようなUbuntuサーバー構築を、もう少し体系的に学びたい方に向いています。