You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需挂载Windows文件系统,从Linux服务器检查Windows文件是否存在并复制的脚本实现方案咨询

无需挂载Windows文件系统,从Linux服务器检查Windows文件是否存在并复制的脚本实现方案咨询

嗨,这个需求完全可以搞定!核心思路是让Windows服务器支持SSH访问,这样Linux端就能通过SSH命令远程操作——既可以检查文件是否存在,又能直接复制,全程不需要挂载Windows文件系统,还能用SSH密钥对实现无密码自动化,非常适合写脚本。下面一步步给你拆解实现步骤:

第一步:在Windows服务器上启用OpenSSH服务

Windows 10(1809+)和Windows Server 2019及以上版本自带OpenSSH服务,直接安装启用即可:

  1. 打开PowerShell(以管理员身份),执行以下命令安装OpenSSH Server:
    Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
    
  2. 启动服务并设置开机自启:
    Start-Service sshd
    Set-Service -Name sshd -StartupType 'Automatic'
    
  3. 确保Windows防火墙允许SSH端口(默认22)通过,或者直接用命令放行:
    New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH SSH Server' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
    

第二步:配置SSH密钥对实现无密码登录

为了让脚本自动化运行时不用手动输入密码,我们可以配置SSH密钥对验证:

  1. 在Linux服务器上生成密钥对(如果还没有的话),执行命令后一路回车即可:
    ssh-keygen -t ed25519
    
  2. 将Linux的公钥复制到Windows服务器的授权列表中:
    • 最简单的方式是用ssh-copy-id命令(第一次执行需要输入Windows用户的登录密码):
      ssh-copy-id your-windows-username@windows-server-ip
      
    • 如果ssh-copy-id不好用,也可以手动操作:把Linux服务器上~/.ssh/id_ed25519.pub文件里的内容,粘贴到Windows用户目录下的.ssh/authorized_keys文件中(比如C:\Users\your-windows-username\.ssh\authorized_keys)。注意:Windows里要确保这个.ssh目录和authorized_keys文件只有当前用户有读写权限,否则SSH会拒绝密钥登录。

第三步:编写Linux端的自动化脚本

下面是一个完整的示例脚本,实现“检查Windows文件是否存在→存在则复制到Linux”的逻辑:

#!/bin/bash

# 配置参数,根据你的实际情况修改
WINDOWS_USER="your-windows-username"
WINDOWS_IP="192.168.1.100"  # Windows服务器的IP或主机名
# Windows文件路径:可以用正斜杠替代反斜杠,避免转义麻烦
REMOTE_FILE_PATH="/c/path/to/your/target-file.txt"
# Linux本地保存路径
LOCAL_FILE_PATH="/home/your-linux-user/saved-file.txt"

# 远程执行Windows的PowerShell命令,检查文件是否存在
ssh "$WINDOWS_USER@$WINDOWS_IP" "Test-Path '$REMOTE_FILE_PATH'"
CHECK_EXIT_CODE=$?

# 根据返回码判断:Test-Path检测到文件存在时返回0,不存在返回1
if [ $CHECK_EXIT_CODE -eq 0 ]; then
    echo "目标文件存在,开始复制..."
    # 用SCP复制文件到Linux本地
    scp "$WINDOWS_USER@$WINDOWS_IP:$REMOTE_FILE_PATH" "$LOCAL_FILE_PATH"
    COPY_EXIT_CODE=$?
    if [ $COPY_EXIT_CODE -eq 0 ]; then
        echo "文件复制成功!"
    else
        echo "文件复制失败,请检查权限或路径是否正确。"
        exit 1
    fi
else
    echo "目标文件不存在,无需复制。"
    exit 0
fi

使用时记得给脚本添加执行权限:chmod +x check_and_copy.sh,然后直接运行即可。

一些注意事项

  • Windows路径写法:在SSH/SCP命令中,推荐用正斜杠替代Windows的反斜杠,比如/c/Users/username/Documents/file.txt,这样不用转义反斜杠,更不容易出错。
  • 权限问题:确保Windows上的目标文件对指定的Windows用户有读取权限,同时Linux本地的保存路径对执行脚本的用户有写入权限。
  • 防火墙检查:如果SSH连接失败,先确认Windows服务器的22端口是否对外开放,Linux服务器能否ping通Windows服务器。

备注:内容来源于stack exchange,提问作者xenon99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 14:54:07