Visual Studio でターゲットの Linux システムに接続する
Linux サポートは Visual Studio 2017 以降で使用できます。
Linux プロジェクトのターゲットは、リモート マシンとなるように構成することも、Windows Subsystem for Linux (WSL) とすることもできます。 両方のリモート マシンと WSL に対して、Visual Studio 2017 でリモート接続を設定する必要があります。
Linux プロジェクトのターゲットは、リモート マシンとなるように構成することも、Windows Subsystem for Linux (WSL) とすることもできます。 リモート マシンの場合は、Visual Studio でリモート接続を設定する必要があります。 WSL に接続するには、WSL への接続に関するセクションに進んでください。
リモート接続を使用する場合、Visual Studio はリモート マシンで C++ Linux プロジェクトをビルドします。 物理マシン、クラウド内の VM、WSL のいずれであるかは関係ありません。 プロジェクトをビルドするために、Visual Studio はソース コードをリモートの Linux コンピューターにコピーします。 その後、コードは Visual Studio の設定に基づいてコンパイルされます。
注意
Visual Studio 2019 バージョン 16.5 以降でも、Visual Studio では、リモート開発のために、Linux システムへの安全な Federal Information Processing Standard (FIPS) 140-2 準拠の暗号化接続がサポートされています。 FISP 準拠の接続を使用するには、代わりに「FIPS 準拠の安全なリモート Linux 開発のセットアップ」のステップに従ってください。
リモート システム上で SSH サーバーを設定する
Linux システム上でまだ ssh
が設定および実行されていない場合、次のステップに従ってインストールします。 この記事の例では、Ubuntu 18.04 LTS と OpenSSH サーバー バージョン 7.6 を使用します。 ただし、比較的最近のバージョンの OpenSSH を使用する任意のディストリビューションでも同じ手順を使用できます。
Linux システム上で、OpenSSH サーバーをインストールして起動します。
sudo apt install openssh-server sudo service ssh start
システム起動時に自動的に ssh サーバーを起動したい場合、systemctl を使用して有効にします。
sudo systemctl enable ssh
リモート接続を設定する
Visual Studio のメニュー バーで [ツール] > [オプション] を選択して、[オプション] ダイアログを開きます。 その後、[クロス プラットフォーム] > [接続マネージャー] を選択し、[接続マネージャー] ダイアログを開きます。
まだ Visual Studio で接続を設定したことがない場合、プロジェクトを初めてビルドする際に、Visual Studio によって [接続マネージャー] ダイアログが開かれます。
[接続マネージャー] ダイアログで、 [追加] ボタンを選択して新しい接続を追加します。
いずれの場合も、 [リモート システムへの接続] ウィンドウが表示されます。
次の情報を入力します。
入力 説明 ホスト名 ターゲット デバイスの名前または IP アドレス ポート SSH サービスが実行されているポート (通常は 22) ユーザー名 認証するユーザー 認証の種類 パスワードと秘密キーの両方がサポートされます パスワード 入力したユーザー名のパスワード 秘密キー ファイル ssh 接続用に作成された秘密キー ファイル パスフレーズ 上で選択した秘密キーで使用されるパスフレーズ 認証には、パスワードまたはキー ファイルとパスフレーズを使用することができます。 多くの開発シナリオではパスワード認証で十分ですが、キー ファイルはさらに安全です。 既にキーの組があるなら、それを再利用できます。 現在、Visual Studio のリモート接続では RSA と DSA キーのみがサポートされています。
注意
ssh-keygen
を使用して秘密キーを作成する場合は、スイッチ-m pem
を指定する必要があります。そうしないと、Visual Studio でキーが受け入れられません。 秘密鍵が-----BEGIN OPENSSH PRIVATE KEY-----
で始まる場合は、それをssh-keygen -p -f <FILE> -m pem
で変換する必要があります。[接続] ボタンを選択すると、リモート コンピューターへの接続が試行されます。
接続が成功すると、Visual Studio ではリモートのヘッダーを使うように IntelliSense が構成されます。 詳しくは、「リモート システムのヘッダーでの IntelliSense」をご覧ください。
接続に失敗した場合は、変更する必要がある入力ボックスが赤色で示されます。
キー ファイルを認証に使う場合は、ターゲット マシンの SSH サーバーが実行され、正しく構成されていることを確認します。
localhost
での WSL への接続に問題がある場合は、「WSL のlocalhost
接続の問題を修正する」を参照してください。
ホスト キーの検証
Visual Studio バージョン 16.10 以降では、Visual Studio からリモート システムに初めて接続する場合は必ず、サーバーのホスト キーのフィンガープリントを確認するように求められます。 以前に OpenSSH のコマンドライン クライアントまたは PuTTY を使用している方は、このプロセスを熟知していることでしょう。 フィンガー プリントによってサーバーが識別されます。 Visual Studio では、フィンガー プリントを使用して、目的の信頼されたサーバーに確実に接続します。
Visual Studio によって新しいリモート接続が初めて確立されるときには、サーバーによって提示されたホスト キーのフィンガープリントを受け入れるか拒否するかを確認するメッセージが表示されます。 また、キャッシュされたフィンガープリントに変更が加えられた場合もそうです。 必要に応じてフィンガープリントを確認することもできます。それには、接続マネージャーで接続を選択し、 [確認] を選択します。
Visual Studio を以前のバージョンから 16.10 以降にアップグレードすると、既存のリモート接続はいずれも新しい接続として扱われます。 最初に、ホスト キーのフィンガープリントの受け入れを求めるメッセージが表示されます。 次に、Visual Studio によって接続が確立され、受け入れたフィンガープリントがキャッシュされます。
また、ConnectionManager.exe
から update
引数を使用してリモート接続を更新することもできます。
サポートされている SSH アルゴリズム
Visual Studio バージョン 16.9 以降では、データの暗号化とキーの交換に使用される、セキュリティで保護されていない古い SSH アルゴリズムのサポートは削除されています。 サポートされているのは以下のアルゴリズムのみです。 これらは、クライアントとサーバー間、およびサーバーとクライアント間の両方の SSH 通信でサポートされています。
アルゴリズムの種類 | サポートされているアルゴリズム |
---|---|
暗号化 | aes128-cbc aes128-ctr aes192-cbc aes192-ctr aes256-cbc aes256-ctr |
HMAC | hmac-sha2-256 hmac-sha2-512 |
キーの交換 | diffie-hellman-group14-sha256 diffie-hellman-group16-sha512 diffie-hellman-group-exchange-sha256 ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 |
ホスト キー | ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521 ssh-dss ssh-rsa |
SSH サーバーを構成する
最初に、背景を少々説明します。 あなたは、Visual Studio から使用する SSH アルゴリズムを選択することができません。 代わりに、SSH サーバーとの最初のハンドシェイク中にアルゴリズムが決定されます。 クライアントとサーバーのそれぞれで、サポートするアルゴリズムの一覧が提供され、その両方に共通する最初のアルゴリズムが選択されます。 暗号化、HMAC、キー交換などのために、Visual Studio とサーバーの間に共通するアルゴリズムが少なくとも 1 つあれば、接続は成功します。
OpenSSH 構成ファイル ( sshd_config
) には、既定では使用するアルゴリズムが構成されていません。 アルゴリズムが指定されていない場合、SSH サーバーはセキュリティで保護された既定値を使用します。 これらの既定値は、SSH サーバーのバージョンとベンダーによって異なります。 Visual Studio でそれらの既定値がサポートされていない場合、次のようなエラーが表示されることがあります: "リモート システムに接続できませんでした。 クライアントからサーバーへの共通の HMAC アルゴリズムが見つかりませんでした。" このエラーは、SSH サーバーが Visual Studio がサポートしていないアルゴリズムを使用するように構成されている場合に表示されます。
最新の Linux ディストリビューション上の既定の SSH サーバーは、Visual Studio でご利用になれます。 ただし、お客様が使用している SSH サーバーが以前のものであり、セキュリティで保護されていない従来のアルゴリズムを使用するように構成されていることもあります。 次の例で、より安全なバージョンに更新する方法を示します。
次の例では、SSH サーバーはセキュリティで保護されていない hmac-sha1
アルゴリズムを使用しています。これは、Visual Studio 16.9 ではサポートされていません。 SSH サーバーで OpenSSH を使用している場合は、次に示すように /etc/ssh/sshd_config
ファイルを編集して、より安全なアルゴリズムを有効にすることができます。 その他の SSH サーバーの構成方法については、サーバーのドキュメントを参照してください。
まず、サーバーが使用するアルゴリズムのセットに、Visual Studio でサポートされているアルゴリズムが含まれていることを確認します。 リモート マシンで次のコマンドを実行すると、サーバーでサポートされているアルゴリズムが一覧表示されます。
ssh -Q cipher; ssh -Q mac; ssh -Q kex; ssh -Q key
このコマンドを実行すると、次のような出力が生成されます。
3des-cbc
aes128-cbc
aes192-cbc
aes256-cbc
...
ecdsa-sha2-nistp521-cert-v01@openssh.com
sk-ecdsa-sha2-nistp256-cert-v01@openssh.com
この出力には、ご利用の SSH サーバーでサポートされている、暗号化、HMAC、キー交換、ホスト キー アルゴリズムがすべて一覧表示されます。 この一覧に、Visual Studio でサポートされているアルゴリズムが含まれていない場合は、先に進む前に SSH サーバーをアップグレードする必要があります。
リモート マシンで /etc/ssh/sshd_config
を編集すると、Visual Studio でサポートされているアルゴリズムを有効にすることができます。 次の例は、さまざまな種類のアルゴリズムをその構成ファイルに追加する方法を示しています。
これらの例は、/etc/ssh/sshd_config
内の任意の場所に追加できます。 それらを確実に、それらの独自の行に配置します。
ファイルを編集したら、SSH サーバーを再起動 (Ubuntu の sudo service ssh restart
) し、Visual Studio からもう一度接続を試みます。
暗号の例
追加: Ciphers <algorithms to enable>
例: Ciphers aes128-cbc,aes256-cbc
HMAC の例
追加: MACs <algorithms to enable>
例: MACs hmac-sha2-256,hmac-sha2-512
キー交換の例
追加: KexAlgorithms <algorithms to enable>
例: KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384
ホスト キーの例
追加: HostKeyAlgorithms <algorithms to enable>
例: HostKeyAlgorithms ssh-dss,ssh-rsa
リモート接続のログを記録する
ログを有効にして、接続の問題のトラブルシューティングに役立てることができます。 メニュー バーで、[ツール] > [オプション] の順に選択します。 [オプション] ダイアログで、[クロス プラットフォーム] > [ログ] を選択します。
ログには、接続、リモート マシンに送信されたすべてのコマンド (そのテキスト、終了コード、実行時間)、および Visual Studio からシェルへのすべての出力が含まれます。 ログ記録は、Visual Studio でのすべてのクロスプラットフォーム CMake プロジェクトまたは MSBuild ベースの Linux プロジェクトで機能します。
ファイルまたは出力ウィンドウの [クロス プラットフォームのログ] ペインに送られるように、出力を構成できます。 MSBuild ベースの Linux プロジェクトの場合、リモート マシンに送信された MSBuild コマンドは、プロセス外で出力されるため、[出力ウィンドウ] にはルーティングされません。 代わりに、"msbuild_" というプレフィックスが付いたファイルに記録されます。
接続マネージャーのコマンドライン ユーティリティ
Visual Studio 2019 バージョン 16.5 以降: ConnectionManager.exe
は、Visual Studio 外でのリモート開発の接続を管理するためのコマンドライン ユーティリティです。 これは、新しい開発マシンをプロビジョニングするなどのタスクに役立ちます。 または、これを利用して Visual Studio で継続的インテグレーションを設定することもできます。 ConnectionManager コマンドの例とすべてのリファレンスについては、「ConnectionManager リファレンス」を参照してください。
TCP ポート フォワーディング
rsync
は、MSBuild ベースの Linux プロジェクトと CMake プロジェクトの両方で使用され、IntelliSense で使用するヘッダーをリモート システムから Windows にコピーします。 TCP ポート フォワーディングを有効にできない場合は、リモート ヘッダーの自動ダウンロードを無効にします。 無効にするには、[ツール] > [オプション] > [クロス プラットフォーム] >[接続マネージャー] > [リモート ヘッダー IntelliSense マネージャー] の順に移動します。 リモート システムで TCP ポート フォワーディングが有効になっていない場合、IntelliSense のリモート ヘッダーのダウンロードが開始されると、次のエラーが表示されます。
rsync
は、ソース ファイルをリモート システムにコピーするために、Visual Studio の CMake サポートでも使用されます。 TCP ポート フォワーディングを有効にできない場合は、リモート コピー ソース メソッドとして sftp
を使用できます。 sftp
は rsync
よりも低速なことが多いですが、TCP ポート フォワーディングとの依存関係がありません。 CMake 設定エディターで、remoteCopySourcesMethod
プロパティを使用すれば、リモート コピー ソース メソッドを管理できます。 リモート システムで TCP ポート フォワーディングが無効になっている場合は、最初に rsync
が呼び出されたときに CMake 出力ウィンドウにエラーが表示されます。
gdbserver
は、埋め込みデバイスでのデバッグに使用できます。 TCP ポート フォワーディングを有効にできない場合は、すべてのリモート デバッグ シナリオで gdb
を使用する必要があります。 リモート システム上のプロジェクトをデバッグする場合、既定で gdb
が使用されます。
Visual Studio の Linux サポートは、TCP ポート フォワーディングに依存しています。 リモート システム上で TCP ポート フォワーディングが無効になっている場合、rsync
と gdbserver
の両方が影響を受けます。 お客様がこの依存関係の影響を受けている場合は、Developer Community でこちらの提案チケットに投票してください。
WSL に接続する
Visual Studio 2017 では、リモート Linux マシンに使用するのと同じ手順を使用して WSL に接続できます。 [ホスト名] には localhost
を使用します。
Visual Studio 2019 バージョン 16.1 より、Visual Studio では、C++ を Windows Subsystem for Linux (WSL) とともに使用するためのネイティブ サポートが追加されています。 これは、ローカルの WSL インストールで直接ビルドおよびデバッグできることを意味します。 リモート接続を追加したり、SSH を構成したりする必要がなくなりました。 詳細については、こちらの WSL をインストールする方法の説明をご覧ください。
WSL インストールを Visual Studio で動作するように構成するには、次のツールをインストールする必要があります: gcc
または clang
、gdb
、make
、ninja-build
(Visual Studio 2019 バージョン 16.6 以降を使用する CMake プロジェクトにのみ必要)、rsync
、および zip
。 apt
を使用するディストリビューションにそれらをインストールするには、次のコマンドを使用します。これにより、g++ コンパイラもインストールされます。
sudo apt install g++ gdb make ninja-build rsync zip
WSL の localhost
接続の問題を修正する
localhost
で Linux 用 Windows サブシステム (WSL) に接続すると、ポート 22 で Windows ssh
クライアントとの競合が発生する場合があります。 WSL の /etc/ssh/sshd_config
で、ssh
が要求を待ち受けるポートを 23 に変更します。
Port 23
パスワードを使用して接続する場合は、/etc/ssh/sshd_config
で次のように設定する必要があります。
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
これらの変更を行った後、SSH サーバーを再起動します (Ubuntu の場合 sudo service ssh restart
)。
次に、ポート 23 を使って localhost
への接続を再試行します。
詳細については、「Linux ワークロードのダウンロード、インストール、セットアップ」をご覧ください。
WSL 用の MSBuild プロジェクトを構成するには、「Linux プロジェクトを構成する」を参照してください。 WSL 用の CMake プロジェクトを構成するには、Linux CMake プロジェクトの構成に関する記事を参照してください。 WSL を使用するシンプルなコンソール アプリケーションを作成するための詳細な手順については、入門のブログ記事「C++ with Visual Studio 2019 and the Windows Subsystem for Linux (WSL)」 (C++ と Visual Studio 2019 および Windows Subsystem for Linux (WSL)) をご覧ください。
参照
Linux プロジェクトを構成する
Linux CMake プロジェクトを構成する
Linux プロジェクトの配置、実行、デバッグ
CMake デバッグ セッションを構成する