您能否通过 sftp 和 scp 进入将 bash 设置为默认 shell 的 Windows OpenSSH ?

您能否通过 sftp 和 scp 进入将 bash 设置为默认 shell 的 Windows OpenSSH ?

当默认 ssh shell 设置为 powershell 时:

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

我可以毫无问题地通过 ssh、scp 和 sftp 进入 Windows 机器。

当默认 ssh shell 设置为 bash (WSL2) 时:

 New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\bash.exe" -PropertyType String -Force

我只能 ssh 进入 Windows 机器,scp 和 sftp 挂起。

使用 -vvv 开关会提供详细输出,表明身份验证正常,该过程在最后挂起,以下是尾部:

debug1: Sending command: scp -v -f Downloads/test.jpg
debug2: channel 0: request exec confirm 1
debug3: send packet: type 98
debug2: channel_input_open_confirmation: channel 0: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel 0: rcvd adjust 2097152
debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 0
debug2: exec request accepted on channel 0

关于如何让 scp 和 sftp 与 bash 良好配合,您有什么想法吗?

答案1

msys2 的完整设置:

  1. 创建一个包装器bashFromSsh.bat,可以将其放置在任何地方。此包装器将在注册表中设置为默认 shell(这是必需的,因为我们需要使用参数来调用 shell,而这在注册表项本身中是无法实现的):
@echo off
C:\msys64\msys2_shell.cmd -defterm -no-start -msys %*
  1. 从管理员 powershell 设置默认 shell:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\path\to\bashFromSsh.bat" -PropertyType String -Force
  1. 在 中C:\ProgramData\ssh\sshd_config,进行如下替换:
#Subsystem      sftp    sftp-server.exe
Subsystem       sftp    /c/Windows/System32/OpenSSH/sftp-server.exe

这是必要的,以便 bash 可以找到 sftp-server.exe。

  1. 重新启动 sshd 服务。

就是这样:ssh 可以工作(带或不带参数),scp 和 sftp 也可以。

/c这大概可以通过替换来适应 wsl/wsl2 /mnt/c

相关内容