win32 openssh 默认 shell wsl.exe 命令参数

win32 openssh 默认 shell wsl.exe 命令参数

环境:

Windows 10.0.21327 wsl2,ubuntu 20 LTS win32-openssh

Windows Openssh 默认 shell 更改为:Computer\HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH\DefaultShell

  • 执行文件目录:\WINDOWS\System32\wsl.exe

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH\DefaultShellCommandOption

  • -e

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH\DefaultShellEscapeArguments

  • 0

问题: 我正在尝试从远程 ubuntu 计算机通过 ssh 连接到 Windows 计算机,并在 bash shell 中运行 rsync 命令,该 shell 被设置为 Windows 中打开 ssh 的默认 shell。以前在 wsl1 中,这个功能对我来说运行良好,但现在我将 .exe 从 bash.exe 更改为 wsl.exe 后,它就不起作用了。

作为测试,我运行以下命令并从 rsync 获取标准版本和命令行使用输出:ssh[电子邮件保护]同步

当我添加 rsync 参数时,我没有得到任何输出,而我希望 rsync 版本打印在我的标准输出中(正确的假设?):

ssh [email protected] rsync --version

如果我添加 -t 参数,我会得到输出: ssh -t [email protected] rsync --version

但是当我运行真正的 rsync 命令时,我不认为我想将 -t 作为 ssh 选项传递,因为我认为 rsync 需要非交互式登录 shell,不是吗?

如果我尝试运行真正的 rsync 命令,我总是收到以下错误:命令: rsync -vihrtl --progress --delete --partial -e "ssh -i ~/.ssh/id_rsa" [email protected]:/mnt/k/Onedrive /misc-home-backup/misc-home-media

错误:

rsync 错误:io.c(235) 处的 rsync 协议数据流 (代码 12) 出现错误 [Receiver=3.1.3]

如果我只是从 ubuntu ssh 进入 windows 机器,我会得到一个正常的 bash shell 提示,没有消息、换行符或任何其他输出。我检查了 wsl ubuntu 中的 ~/.bashrc 文件,我从未更改过它的默认配置,其中的第一个条目是登录 shell 将保持静默状态且没有输出。


问题: 我认为我的问题是,使用 Windows 上的 openssh 配置,我可以执行:ssh user@host 命令,但不能执行:ssh user@host 命令参数

如何配置 Windows OpenSSH 的 DefaultShell 注册表项以便能够传递命令行选项?

答案1

根据 DefaultShell 以及目标可执行文件的运行方式,您可能必须将命令放在引号中,例如:ssh [email protected] "rsync --version"

为了进行故障排除,您还可以使用它ssh -tt来确保您获得命令输出,尽管当一切正常时这不是必需的。

相关内容