scp command fails to transfer file and returns 1.
Takashi Yano
takashi.yano@nifty.ne.jp
Wed Jul 13 14:38:33 GMT 2022
On Wed, 13 Jul 2022 07:41:25 +0000
> Cygwinサポート ご担当様
>
> お世話になっております。
> 沈 テイです。
>
> 下記の問題の解決について、ご協力をお願いします。
>
> ■環境
> OS: Windows Server 2019
> Cygwinバージョン: 3.3.5
>
> ■問題が起きた背景
> 当方のアプリケーションプログラムでは、リモートシステム(OS: Linux)へ
> SSH通信やファイル転送を行う目的で、Cygwinに含まれるssh, scpコマンドを
> 子プロセスとして実行する実装にしています。
> ※実証内容の詳細は、"■当方のアプリケーションプログラム"を参照
> ※事前準備として、SSH公開鍵を設定し、パスワードの問い合わせ無しで
> SSH接続できることを確認しています。
>
> ■問題の内容
> URL(https://www.cygwin.com/)からダウンロードした最新バージョン(3.3.5)の
> CygwinをOSに導入した後、当方のアプリケーションプログラムを実行すると、
> scpコマンドは毎回、戻り値"1"で復帰し、ファイル転送が失敗します。
>
> 当方のアプリケーションプログラムをデバックした結果、
> scpコマンドは下記のメッセージを返却していました。
>
> /usr/bin/scp: dest open ""/tmp/a"": No such file or directory
> /usr/bin/scp: failed to upload file /cygdrive//C/test/a to "/tmp/a"
>
> ■問題の補足
> ・scpコマンドを、当方のアプリケーションプログラムから子プロセスとして
> 実行するのではなく、コマンドプロンプトやCygwin Bash Shellから直接的に
> 実行した場合は、戻り値"0"で復帰し、ファイル転送は成功します。
>
> ・旧バージョン(3.2.0)のCygwinを同じOSに導入した後、
> 当方のアプリケーションプログラムを実行した場合は、scpコマンドは
> 戻り値"0"で復帰し、ファイル転送は成功します。
>
> 以上のことから、我々は、最新バージョン(3.3.5)と旧バージョン(3.2.0)の
> Cygwinで、scpコマンドの動作仕様に何らかの非互換があるのではないか、と
> 推測しています。
>
> ■依頼事項
> 上記の問題に対して、考えられる原因および対処方法はありますか?
>
> <回答先>
> soft-mpop-qqm@ml.css.fujitsu.com
>
> ■当方のアプリケーションプログラム
> ・子プロセスの実行方法
> Windows APIのCreateProcess()を以下の様に使用し、子プロセスを実行します。
>
> CreateProcess(NULL,
> fullPathCmd, /* ssh,scpのcommond line */
> NULL, /* process security attributes */
> NULL, /* primary thread security attributes */
> TRUE, /* handles are inherited */
> NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW, /* creation flags */
> NULL, /* use parent's environment */
> NULL, /* use parent's current directory */
> &si, /* STARTUPINFO pointer */
> &pi); /* receives PROCESS_INFORMATION */
>
> ・sshコマンドを実行する時のコマンドライン
> 上記に示したCreateProcess()の第2パラメタfullPathCmdを、以下の様に
> 指定しています。
>
> <Cygwinのインストールディレクトリ>\bin\ssh.exe -q -l root -p 22 ホスト名 "echo aaa && /bin/sh -c \"/bin/uname -n\""
>
> ・scpコマンドを実行する時のコマンドライン
> 上記に示したCreateProcess()の第2パラメタfullPathCmdを、以下の様に
> 指定しています。
>
> <Cygwinのインストールディレクトリ>\bin\scp.exe "/cygdrive//C/test/a" "root"@ホスト名:""/tmp/a""
>
>
> 以上、よろしくお願いします。
>
>
> 以降は英訳文章です。
> ******************************************************************
> Cygwin Support Dear Representatives
>
> Thank you for your support.
> I am Shen Ting.
>
> We ask for your cooperation in solving the following problem.
>
> ■Environment
> OS: Windows Server 2019
> Cygwin Version : 3.3.5
>
> ■Background of the problem
> In our application program, for the purpose of SSH communication and file transfer to a remote system (OS: Linux),
> the ssh and scp commands included in Cygwin are executed as child processes.
> (*) For details of the demonstration contents, refer to "■Our Application Program"
> (*)As a preliminary preparation, we set the SSH public key and
> confirm that we can connect to SSH without inquiring about the password.
>
> ■The problem
> In the OS, after installing the latest version (3.3.5) of Cygwin downloaded from the URL(https://www.cygwin.com/),
> when we execute our application program, the scp command returns "1" every time, and the file transfer fails.
>
> As a result of debugging our application program, the scp command returned the following message.
>
> /usr/bin/scp: dest open ""/tmp/a"": No such file or directory
> /usr/bin/scp: failed to upload file /cygdrive//C/test/a to "/tmp/a"
>
> ■Problem supplement
> ・If the scp command is executed directly from the command prompt or Cygwin Bash Shell
> instead of being executed from our application program as a child process,
> "0" will be returned and the file transfer will succeed.
>
> ・If we execute our application program after introducing the old version Cygwin(3.2.0) to the same OS,
> the scp command will return "0" and the file transfer will be successful.
>
> From the above, we speculate that there may be some incompatibility in the operating specifications of
> the scp command in the latest version Cygwin(3.3.5) and the old version Cygwin(3.2.0).
>
> ■Requests
> Are there any possible causes and workarounds for the above problem?
>
> <Respondents>
> soft-mpop-qqm@ml.css.fujitsu.com
>
> ■Our Application Program
> ・How child processes run
> Use the Windows API CreateProcess() as follows to execute the child process.
>
> CreateProcess(NULL,
> fullPathCmd, /* ssh,scpのcommond line */
> NULL, /* process security attributes */
> NULL, /* primary thread security attributes */
> TRUE, /* handles are inherited */
> NORMAL_PRIORITY_CLASS|CREATE_NO_WINDOW, /* creation flags */
> NULL, /* use parent's environment */
> NULL, /* use parent's current directory */
> &si, /* STARTUPINFO pointer */
> &pi); /* receives PROCESS_INFORMATION */
>
> ・Command line when executing ssh command
> The second parameter of CreateProcess() shown above, fullPathCmd, is specified as follows.
>
> <Cygwin Installation Directory>\bin\ssh.exe -q -l root -p 22 ホスト名 "echo aaa && /bin/sh -c \"/bin/uname -n\""
>
> ・Command line when executing scp command
> The second parameter of CreateProcess() shown above, fullPathCmd, is specified as follows.
>
> <Cygwin Installation Directory>\bin\scp.exe "/cygdrive//C/test/a" "root"@ホスト名:""/tmp/a""
I cannot reproduce your problem. Could you please provide
simple test case in C-lang?
--
Takashi Yano <takashi.yano@nifty.ne.jp>
More information about the Cygwin
mailing list