无需挂载Windows文件系统,从Linux服务器检查Windows文件是否存在并复制的脚本实现方案咨询
无需挂载Windows文件系统,从Linux服务器检查Windows文件是否存在并复制的脚本实现方案咨询
嗨,这个需求完全可以搞定!核心思路是让Windows服务器支持SSH访问,这样Linux端就能通过SSH命令远程操作——既可以检查文件是否存在,又能直接复制,全程不需要挂载Windows文件系统,还能用SSH密钥对实现无密码自动化,非常适合写脚本。下面一步步给你拆解实现步骤:
第一步:在Windows服务器上启用OpenSSH服务
Windows 10(1809+)和Windows Server 2019及以上版本自带OpenSSH服务,直接安装启用即可:
- 打开PowerShell(以管理员身份),执行以下命令安装OpenSSH Server:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 - 启动服务并设置开机自启:
Start-Service sshd Set-Service -Name sshd -StartupType 'Automatic' - 确保Windows防火墙允许SSH端口(默认22)通过,或者直接用命令放行:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH SSH Server' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
第二步:配置SSH密钥对实现无密码登录
为了让脚本自动化运行时不用手动输入密码,我们可以配置SSH密钥对验证:
- 在Linux服务器上生成密钥对(如果还没有的话),执行命令后一路回车即可:
ssh-keygen -t ed25519 - 将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
相关产品推荐
相关产品推荐

