質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

Q&A

解決済

3回答

1278閲覧

VisualStudio2017のビルドイベントでSCPコマンド実行に失敗する

kon2323

総合スコア8

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

0グッド

0クリップ

投稿2019/01/19 15:08

前提・実現したいこと

下記環境環境化でSCPコマンドが実行できず困っています。
PATH環境変数内容出力した際に"C:\WINDOWS\System32\OpenSSH;"が含まれているのでパスは通ると思うのですが。。

  • OS : Microsoft Windows 10 Pro [Version 10.0.17134.523]
  • IDE : Visual Studio Community 2017 [Version 15.9.2]
  • ソリューション種類 : ターゲットフレームワーク.NETCore2.1のASP.NETCoreWebアプリケーション(RazorPage)
  • ビルドイベント種類 : ビルド後イベントのコマンドライン
  • ビルド後イベントの実行タイミング : ビルドが成功したとき

該当のソースコード

ビルドイベント

bat

1"$(SolutionDir)deploy.bat"

deploy.bat

bat

1"" > path_result.txt 2PATH >> path_result.txt 3 4"" > scp_result.txt 5scp 2>> scp_result.txt 6

期待する結果

path_result.txt

(省略)

scp_result.txt

usage: scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] source ... target

実際の結果

path_result.txt

PATH=C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\OpenCL SDK\3.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\3.0\bin\x64;C:\ProgramData\Lenovo\ReadyApps;C:\Program Files\EmEditor;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\ManagementStudio\;C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\120\DTS\Binn\;C:\Program Files\Microsoft SQL Server\120\DTS\Binn\;C:\Java\jdk1.8.0_25\bin\;C:\play-2.2.5\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.4\;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.1\;C:\Program Files\Microsoft\Web Platform Installer\;C:\Program Files (x86)\Common Files\Acronis\SnapAPI\;C:\Program Files (x86)\EaseUS\Todo Backup\bin;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files\Git LFS;C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn\;C:\Program Files (x86)\GtkSharp\2.12\bin;C:\Program Files\dotnet\;C:\nodejs\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\Microsoft VS Code\bin;C:\Go\bin;C:\Program Files\Git\cmd;C:\Users\Hoo.dnx\bin;C:\Program Files (x86)\Git\bin;C:\nuget\;C:\Program Files\EmEditor;C:\Program Files (x86)\Microsoft VS Code\bin;C:\Users\Hoo\AppData\Local\Microsoft\WindowsApps;Z:\src\go\bin;C:\Users\Hoo\AppData\Roaming\npm;Z:\src\go\bin;C:\Users\Hoo.dotnet\x64;C:\Users\Hoo.dotnet\tools;C:\Program Files (x86)\EaseUS\Todo Backup\bin\x64\

scp_result.txt

'scp' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。

他に試したこと

  • 直接deploy.batを実行したところ、出力内容が期待する結果となりました。
  • dirの出力結果をファイルに書き出すようにdeploy.batを変更し、VSのリビルドするとフォルダ内容がファイルに出力されました。
  • sshのエラー出力結果をファイルに書き出すようにdeploy.batを変更し、VSのリビルドするとscpの時と同じ結果になりました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

WOW64のせいでリダイレクトされてsystem32配下を見ていないのではないですかね?
VisualStudioは32ビットアプリなので、system32配下をアクセスしようとするとsyswow64にアクセスすることになるのではないかと思います。
そこで、syswow64にOpenSSHフォルダがない為にエラーになっているのではないでしょうか
32ビット版のものをインストールできるのであれば、インストールしたらsyswow64フォルダにインストールされるのではないかと思います。
(実験できる環境にないので想像です)
そうすれば、ビルドイベントからscpが使えるのではないかと思います。

投稿2019/01/22 07:12

YAmaGNZ

総合スコア10242

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/01/22 07:35

これです!なんで64/32の考えに行きつかなっかんだろう…。 とはいえ、Windows10の1803以降で標準で追加されたSSHを機能追加しても64ビット版しか入らないようなので、32ビット版が欲しい場合は別パッケージを用意する必要があるのかもしれません。 この挙動がどこから来るのかという私のもやもやは晴れましたが、kon2323さんのもやもやが晴れたわけではないので、なんだか申し訳ないといいますか。
YAmaGNZ

2019/01/22 07:43

pathを通すときに%windir%\Sysnativeを指定すれば32ビット版を入れなくてもいけるとは思いますが これをパスに入れると影響が大きいと思いますので、scpを%windir%\sysnative\OpenSSH\scp で呼び出せばいけそうですね
退会済みユーザー

退会済みユーザー

2019/01/22 07:57

sysnativeリダイレクトは初めて知りました。勉強になりました。 Win10x64とVS2017で、ビルド後コマンドで実行できることを確認しました。 #また本人そっちのけで申し訳なく。
kon2323

2019/01/23 15:23

YAmaGNZさん、ご回答ありがとうございます! こちらではまだ確認できていないのですが、lazybones2000さんから実行できた旨のコメントいただいていますので、原因はYAmaGNZご指摘の理由で間違いなさそうです。 ※私もsysnativeリダイレクトは初めて知りました。非常に勉強になります。
guest

0

OpenSSHを有効にし、VS2017Communityを入れて確認してみました。
なるほど、OpenSSHフォルダーがあるにも関わらず、ビルド時に見えていないのですね。

---ビルド後イベントのコマンドライン--- dir /ad C:\Windows\System32\O* dir C:\Windows\System32\OpenSSH\scp.exe ---出力ウィンドウの表示(上記該当部分のみ)--- 1> ドライブ C のボリューム ラベルがありません。 1> ボリューム シリアル番号は 5620-779D です 1> 1> C:\Windows\System32 のディレクトリ 1> 1> 2019/01/21 15:03 <DIR> oobe 1> 2018/07/10 18:19 <DIR> or-IN 1> 0 個のファイル 0 バイト 1> 2 個のディレクトリ 297,519,915,008 バイトの空き領域 1> 指定されたファイルが見つかりません。

この挙動、記憶の彼方に対策方法があった気がするのですが全くたどり着けません。

というわけで、きれいな解決方法ではないですが、今回はscpが実行できればいいのですから、ビルド時に参照可能な適当なフォルダー(例えば$(SolutionDir))配下にscp.exeをコピーするとかリンクを作るというのはどうでしょうか。

リンクを作る場合のサンプルを示します。
管理者のコマンドプロンプトから下記を実行すると、scp.exeのシンボリックリンクがC:\hogehoge\scp.exeとして作成されます。

mklink C:\hogehoge\scp.exe C:\Windows\System32\OpenSSH\scp.exe

ビルド時に実行されることは確認しましたが、これだけでscpが正常に実行できるのか、そもそもこの手法でいろいろなところから突っ込まれたりしないかなどは未確認です。

PS これ、プログラミングなのか…という気がしつつ。

投稿2019/01/22 06:41

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

path_result.txtでpath環境変数に入っているようには見えますが、scp_result.txtの内容からすれば、パスが通っていないということになるので、とりあえず動作すればいいのであれば、scpをフルパス指定すればいいのではないでしょうか。

その他、本題ではないかもしれませんが、提示された情報で気になる点を。

  • PATHの設定内容

かなり長いですよね。重複する項目もあるようですので整理したほうが良いように思います。

  • deploy.batの内容

1行目と4行目の"" >の記述は転記ミスでしょうか?
空ファイル(に近いもの)を新規作成する意図だと思いますが、この記述通りだとすると、エラーで何も行われていないはずです。そのため、xxx_result.txtの内容は、実行する度に追記されていきます。

  • xxx_result.txtの内容

これらのファイルは、$(SolusionDir)にあるものを確認されたのでしょうか。ビルド時の結果ではなく、バッチファイル単体で実行した結果を見ているために、切り分けが迷走しているということはないでしょうか。
提示されたバッチファイルでは、ファイル名しか指定していないため、カレントフォルダーに出力されます。バッチファイルと同じフォルダーではありません。
Visual Studioは軽くかじった程度でビルドイベントを設定したことがなく、今は手元に環境がないため確認できないのですが、ビルドイベント実行時のカレントフォルダーは$(SolutionDir)と同じなのでしょうか。そうでなければ、ビルド時に出力されたファイルを見ていないことになります。

投稿2019/01/21 08:38

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kon2323

2019/01/21 15:19 編集

ご回答ありがとうございます。 また、私の情報開示に至らないところがあり、申し訳ありません。 > path_result.txtでpath環境変数に入っているようには見えますが、scp_result.txtの内容からすれば、 > パスが通っていないということになるので、とりあえず動作すればいいのであれば、scpをフルパス指定すればいいのではないでしょうか。 → バッチファイルにscpをフルパス指定でビルド経由実行してみましたが、コマンド見つからないエラーになります。 > deploy.batの内容 > 1行目と4行目の"" >の記述は転記ミスでしょうか? > 空ファイル(に近いもの)を新規作成する意図だと思いますが、この記述通りだとすると、エラーで何も行われていないはずです。そのため、xxx_result.txtの内容は、実行する度に追記されていきます。 → 毎度新規作成する意図でこのように記述しています。 ご指摘の通り、コマンドプロンプトで実行するとエラーになりました。 しかし、バッチファイルを直接実行すると私の意図通りに出力されます。。 > xxx_result.txtの内容 > これらのファイルは、$(SolusionDir)にあるものを確認されたのでしょうか。ビルド時の結果ではなく、バッチファイル単体で実行した結果を見ているために、 > 切り分けが迷走しているということはないでしょうか。 → バッチファイルは$(SolusionDir)に配置しています。この状態でバッチ単体実行すると期待通りの出力になり、ビルド経由実行だとコマンド見つからないエラーになります。 > ビルドイベント実行時のカレントフォルダーは$(SolutionDir)と同じなのでしょうか。 → はい、$(SolutionDir)と同じです。
kon2323

2019/01/21 15:15

手動でバッチ実行すれば必要な処理はできますので、とりあえずはこれ(その都度バッチ実行)で行くことにしました。 ありがとうございました。
退会済みユーザー

退会済みユーザー

2019/01/21 16:05

すみません。""のくだりは私の誤認でした。コマンドがないエラーの結果をリダイレクトしていることになるので、空ファイルは作成されますよね。よく考えれば当然のことでした。(空ファイル作成の手法としてはあまりきれいではないですが) お力になれず申し訳ありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問