# 远程文件访问
该功能适用于 Linux 访问 Windows 主机,目前 Syslab 实现了两种方式,即通过代码的方式访问以及通过远程文件读写的方式访问,需要说明的是,这两种方式均要求 Linux 机器和 Windows 机器在同一网段,即 Linux 机器可以访问 Windows 机器的 IP, 本文将针对这两种方式进行介绍。
# 功能特征
- 支持远程 PC 上文件读写
- 支持远程 PC 上文件同步更新
- 支持远程 PC 上文件运行与调试
# 通过代码访问
此方法适用于 Syslab Online 访问 Windows 主机。
# 一、通过代码访问远程文件配置说明
# 1.1 Windows 部署 OpenSSH 服务
# 离线安装部署 OpenSSH 服务器
单击下载,并解压下载的文件夹,在 Windows 主机中通过管理员启动 PowerShell,进入到解压的文件夹,输入 .\installOpenSSH.bat 执行脚本安装部署 OpenSSH 服务:
执行完脚本后,OpenSSH 服务已在 Windows 主机上安装完成并成功启动,同时每次重启电脑后都会自动启动该服务。
# 1.2 Linux 机器配置
# 安装 sshfs(需要 root 权限)
- CentOS:sudo yum install sshfs
- Ubuntu:sudo apt-get install sshfs
# 生成 ssh 密钥
若想要实现无密码访问 Windows 主机,需要在 Linux 机器中生成密钥文件,并将公钥保存至 Windows 主机中,步骤如下:
首先需要在 Linux 机器中生成密钥文件,打开终端,执行如下指令:
# 生成密钥文件 ssh-keygen -t ed25519这时一直按回车键接受默认值即可,然后会在 $HOME/.ssh/目录下生成 id_ed25519 私钥文件和 id_ed25519.pub 公钥文件。

接下来需要将公钥文件复制到 Windows 主机中
# 方式一:在 Linux 机器中打开终端输入如下命令
# 获取公钥内容
AUTHORIZED_KEY=$(cat ~/.ssh/id_ed25519.pub)
# 远程 PowerShell 命令
REMOTE_POWERSHELL="powershell -Command \"Add-Content -Force -Path \$env:ProgramData\ssh\administrators_authorized_keys -Value '$AUTHORIZED_KEY'; icacls.exe '\$env:ProgramData\ssh\administrators_authorized_keys' /inheritance:r /grant 'Administrators:F' /grant 'SYSTEM:F'\""
# 连接到 Windows 主机并执行 PowerShell 命令
ssh username@ip "$REMOTE_POWERSHELL"
其中 username 和 ip 分别对应 Windows 主机的用户和 IP,执行完最后一条指令可能会提示 Are you sure you want to continue connecting (yes/no/[fingerprint])? 此时输入 yes,然后需要输入用户主机的密码,输入密码之后配置完成。
# Windows 查看用户名
- 按 Win + R,输入 cmd ,按回车。
- 输入以下命令查看用户名(该示例中用户名为 TR)。
echo %USERNAME%
注:用户名中不能包含特殊字符及空格。
# Windows 查看 ip
# 方式二:在 Linux 机器中打开终端输入如下命令,获取公钥内容
# 获取公钥内容
cat ~/.ssh/id_ed25519.pub
将公钥内容拷贝至 Windows 主机的 C:\ProgramData\ssh\administrators_authorized_keys 文件中,若 administrators_authorized_keys 文件不存在,需要手动创建。
在 Linux 机器中执行如下指令进行验证
# 连接 Windows 主机
ssh username@ip
若可以无密码连接 Windows 主机,则说明配置成功。
若依然需要密码访问,可能是以下问题导致的:
- 未使用压缩包中的 OpenSSH-Win64.zip 文件进行安装,需要使用压缩包中的文件进行安装。
- C:\ProgramData\ssh\sshd_config 文件中没有以下内容,需要补充进去。
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
补充完成后,以管理员身份打开 powershell 在 Windows 主机中重启 OpenSSH 服务
# 重启 OpenSSH 服务
Restart-Service sshd
# 二、通过代码访问远程文件使用方法
# 2.1 挂载远程目录
在下载的压缩包内,包含两个 jl 文件,一个数据文件:
- mountFolder.jl 文件提供两个接口,用于挂载目录和卸载目录。
- example.jl 文件通过 include 调用 mountFolder.jl 接口,提供远程文件访问的使用方法。
- data.jld2 数据文件,用于测试读取远程目录下的文件。
- 打开 example.jl 文件,在该文件中需要配置以下参数:
- windowsIp: Windows 主机的 IP 地址
- sharePath: Windows 主机上挂载的文件夹路径
- username: Windows 主机的用户名
- password: 该参数不用填写
- 配置完成后,运行 example.jl 文件,即可挂载远程目录,读取 Windows 主机上 data.jld2 数据文件。
# 通过远程文件读写插件访问
此方法适用于 Syslab Online 访问 Windows 主机。Syslab Remote File 是 Syslab 软件的基础组件,该扩展可以将您远程服务器上的文件挂载到 Syslab Online 上,方便您在 Syslab Online 环境中使用远程 Windows 主机上的文件。
# 一、通过 Syslab Remote File 插件访问远程文件配置说明
# 1.1 Windows 部署 OpenSSH 服务
该方式和通过代码访问远程文件部署 OpenSSH 服务相同。
# 1.2 Syslab Online 服务器配置
# 安装 sshfs(需要 root 权限)
- CentOS:sudo yum install sshfs
- Ubuntu:sudo apt-get install sshfs
# 配置挂载位置
Syslab Online 左下角齿轮图标>设置>搜索 remote mount path>配置挂载目录。 该目录默认位置为用户缓存目录下的 remote-sshfs,请确保该目录下预留足够的空间挂载远程文件。
# 二、远程访问插件使用方法
# 2.1 挂载远程目录
# 方式一:填写挂载信息并挂载
进入 Ribbon 菜单>主页>文件>远程文件按钮打开远程访问文件页面,输入远程 PC 的 IP、共享目录、用户名及密码,保证远程 PC 网络连接正常且 IP 可访问的状态下单击挂载按钮即可实现远程挂载。
# 方式二:通过配置文件默认挂载远程目录
单击右上角的打开配置文件后,根据以下配置信息进行配置。
# 2.2 卸载挂载目录
# 方式一:打开卸载列表卸载挂载目录
# 方式二:关闭 Syslab Online 页面卸载挂载目录
当所有 Syslab Online 页面关闭时,会自动卸载所有挂载目录。下次打开时会自动恢复所有挂载目录。
# 2.3 异常挂载目录处理方式
# 2.4 手动卸载异常挂载目录(需要root权限)
在 bash 终端输入:sudo fusermount -uz挂载目录
# 2.5 访问远程文件方式
将文件路径改为挂载目录下的路径,即可访问远程 PC 上对应文件
# FAQ
- 挂载失败提示:Connection reset by peer,请检查服务器 IP 是否可访问,账号及密码是否正确
- 挂载失败提示:mount failed: No such File or Directory,请检查服务器共享目录是否填写正确
- 卸载失败提示:fusermount: failed to unmount: xxx/xxx Device or resource busy,请检查当前资源管理器/终端/编辑器是否占用了挂载目录
- 挂载成功后,挂载文件夹名称不可修改,否则会造成挂载异常
- 关闭页面时会卸载挂载目录,下次打开 Syslab Online 将会根据配置文件挂载远程文件
- 挂载服务器若出现断连等异常,可以通过刷新页面/重启 Syslab server 卸载异常挂载点
- 通过界面方式挂载/卸载远程目录会同步到配置文件中。