CYGWIN窗口cygrunsrv sshd服务器和MS-DOS样式path检测到

这个想法是为了摆脱当连接到作为Windows窗口(sshd)中的服务运行的cygwin deamon时给出的CYGWIN警告:

有问题的情况:

> ssh -i <my private key> me@server "ls d://path//to//folder//" cygwin warning: MS-DOS style path detected: d://path//to//folder// Preferred POSIX equivalent is: /cygdrive/d/path/to/folder/ CYGWIN environment variable option "nodosfilewarning" turns off this warning. Consult the user's guide for more details about POSIX paths: http://cygwin.com/cygwin-ug-net/using.html#using-pathnames [...] 

此警告可能会导致执行的远程命令返回警告,而不是“0”状态代码。

警告告诉我们在CYGWIN环境variables中设置以下值: “nodosfilewarning”

问题在于它是否在下列任何地方设置,都不会进入远程环境:

  • Windows用户环境variables
  • Windows系统环境variables
  • 在〜/ .bashrc
  • 〜/ .profile文件
  • 在/ etc / bashrc中
  • / etc / profile等

testing用例:

 > ssh -i <my private key> me@server "env | grep CYGWIN" CYGWIN=CYGWIN sshd 

CYGWIN环境variables永远不会包含适当的值,无论您在哪里设置它…

这个问题来自于sshd是通过cygrunsrv.exe运行的,而cygrunsrv.exe是通过在CYGWIN终端中调用ssh-host-config来设置的 。 如果未使用-c标志修改CYGWIN环境变量,或者在从ssh-host-config脚本执行时查询未修改,则会在安装时为CYGWIN环境变量设置默认值:

 *** Query: Enter the value of CYGWIN for the deamon: [] CYGWIN sshd 

有关选项和详细信息,请参阅./bin.ssh-host-config脚本。

  --cygwin -c <options> Use \"options\" as value for CYGWIN environment var 

据我所知,在不卸载服务的情况下修改CYGWIN环境变量并使用-c标志重新进行安装是不可能的! 但是,如果编辑在此处找到的注册表值,则可以修改一次安装的服务参数:

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\sshd\Parameters\Environment CYGWIN 

在值的末尾修改条目并添加nodosfilewarning将解决我们的问题!

我们可以通过再次重新执行测试用例来验证它确实起作用了:

 > ssh -i <my private key> me@server "env | grep CYGWIN" CYGWIN=CYGWIN sshd nodosfilewarning 

从此,执行有问题的案例不应再显示警告消息!