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-...@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-...@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.y...@nifty.ne.jp> -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple