![win32 openssh 默认 shell wsl.exe 命令参数](https://linux22.com/image/764569/win32%20openssh%20%E9%BB%98%E8%AE%A4%20shell%20wsl.exe%20%E5%91%BD%E4%BB%A4%E5%8F%82%E6%95%B0.png)
环境:
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
来确保您获得命令输出,尽管当一切正常时这不是必需的。