2026a

# 远程文件访问


该功能适用于 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 主机中,步骤如下:

  1. 首先需要在 Linux 机器中生成密钥文件,打开终端,执行如下指令:

    # 生成密钥文件
    ssh-keygen -t ed25519
    

    这时一直按回车键接受默认值即可,然后会在 $HOME/.ssh/目录下生成 id_ed25519 私钥文件和 id_ed25519.pub 公钥文件。

  2. 接下来需要将公钥文件复制到 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 查看用户名

  1. 按 Win + R,输入 cmd ,按回车。
  2. 输入以下命令查看用户名(该示例中用户名为 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 数据文件,用于测试读取远程目录下的文件。
  1. 打开 example.jl 文件,在该文件中需要配置以下参数:
  • windowsIp: Windows 主机的 IP 地址
  • sharePath: Windows 主机上挂载的文件夹路径
  • username: Windows 主机的用户名
  • password: 该参数不用填写
  1. 配置完成后,运行 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

  1. 挂载失败提示:Connection reset by peer,请检查服务器 IP 是否可访问,账号及密码是否正确
  2. 挂载失败提示:mount failed: No such File or Directory,请检查服务器共享目录是否填写正确
  3. 卸载失败提示:fusermount: failed to unmount: xxx/xxx Device or resource busy,请检查当前资源管理器/终端/编辑器是否占用了挂载目录
  4. 挂载成功后,挂载文件夹名称不可修改,否则会造成挂载异常
  5. 关闭页面时会卸载挂载目录,下次打开 Syslab Online 将会根据配置文件挂载远程文件
  6. 挂载服务器若出现断连等异常,可以通过刷新页面/重启 Syslab server 卸载异常挂载点
  7. 通过界面方式挂载/卸载远程目录会同步到配置文件中。