问题

如何在ubuntu中开启sftp服务,并在windows中通过winscp访问ubuntu上的文件?

win10如何访问wsl linux子系统中的文件?

前提

windows中已有密钥对。如没有请查找相关资料。

方案

1.在windows中安装winscp

winscp

2. 检查ubuntu中的相关服务

运行命令

dpkg --get-selections | grep openssh

如果结果中有openssh-client, openssh-server, openssh-sftp-server, 说明相关服务已安装,可直接跳到下一步。如果没有安装,则运行以下命令进行安装

sudo apt-get install openssh-client
sudo apt-get install openssh-server

3. 启动sftp server

运行以下命令启动服务

service ssh start

如果启动成功,直接跳到下一步。

如果未启动成功,且返回结果中有以下错误信息:

error: could not load host key /etc/ssh/ssh_host_rsa_key

解决方法如下:

运行ls -al /etc/ssh/ssh_*key查看该目录下是否包含错误提示中的文件,如果没有这些文件或者文件大小为0, 说明这些key初始化失败,请运行以下命令重新配置

sudo rm -r /etc/ssh/ssh*key
sudo dpkg-reconfigure openssh-server
service ssh start

4. 在ubuntu中添加可信任公钥

~/.ssh/authorized_keys查看ubuntu上是否有该文件,如果没有请创建该文件。(.ssh目录权限为700, authorized_keys文件权限为600.)

把windows公钥的内容复制到上述文件中。

5. 通过winscp访问ubuntu

打开winscp,配置如下:

File protocol: SFTP
Host name: 你服务器的地址. (如果是本机上的linux子系统,则为127.0.0.1)
Port number: 22
User name: 你在ubuntu系统中的用户名
Password: 留空

填写以上配置后,找到Advanced -> Authentication -> Private key file配置项,点击浏览(…)进入Select private key file窗口,找到C:\Users\你的windows用户名\.ssh目录,如果有ppk格式的密钥,选择即可。

如果没有ppk格式密钥,则在右下角文件过滤下拉框中找到All private Key Files选项, 然后选择你的密钥文件,一般为id_rsa, 选中后winscp会帮助你生成ppk格式的密钥。

保存设置,点击Login即可访问ubuntu中的文件。