我使用本指南从WinSCP 的网站。
我使用了msi
github 页面上列出的安装程序https://github.com/PowerShell/Win32-OpenSSH/releases。
服务器似乎正在运行,但尝试登录后我得到:
---------------------------
Error
---------------------------
Connection has been unexpectedly closed. Server sent command exit status 1.
---------------------------
Cannot initialize SFTP protocol. Is the host running an SFTP server?
---------------------------
OK Reconnect Help
---------------------------
在服务器机器上似乎有一个 sshd 正在运行并监听端口 22(从 TCPview 复制):
过程 | PID | 协议 | 状态 | 本地地址 | 本地端口 | 远程地址 | 远程端口 | 创建时间 | 模块名称 |
---|---|---|---|---|---|---|---|---|---|
SSHD 工具 | 5844 | TCP | 听 | 0.0.0.0 | 22 | 0.0.0.0 | 0 | 2022 年 8 月 19 日下午 6:49:33 | sshd |
SSHD 工具 | 5844 | TCPv6 | 听 | :: | 22 | :: | 0 | 2022 年 8 月 19 日下午 6:49:33 | sshd |
我没有改变默认设置sshd_config
更新:
使用 putty 和相同的用户名和密码就可以浏览目录。
这是 putty 与 WinScp 的比较:
(其中红色和橙色分别表示用户名和机器名称)
FW 规则定义:
答案1
问题是 不在sftp-server.exe
中PATH
。添加安装路径C:\Program Files\OpenSSH
并重新启动服务即可Restart-Service sshd
解决问题。
我通过设置进行诊断
SyslogFacility LOCAL0
LogLevel DEBUG3
在C:\ProgramData\ssh\sshd_config
并注意到它抱怨找不到它
subsystem: cannot stat sftp-server.exe: No such file or directory
答案2
要解决该问题,请打开 Windows 上的 SSH 服务器配置(通常位于C:\ProgramData\ssh\sshd_config
)。
首先,sftp-server.exe
用行替换<absolute-path-to>/sftp-server.exe
。
看来这个设置PATH
对我来说是没用的。
其次,注释或删除以ForceCommand
if exist 开头的行。
它有助于解决 SFTP 客户端的大多数未知错误。但是,这样做的副作用是 SSH 客户端将使用 CMD 作为默认 shell。
要使用 PowerShell 作为默认 shell,请编辑 SSH 客户端配置(通常位于~/.ssh/config
):
Host <host>
...
RemoteCommand powershell