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

PowerShell 5.1从Windows远程连Linux执行命令拉取文件方案咨询

可行实现方案

PowerShell 5.1 原生不支持 PowerShell Remoting over SSH,该特性为 PowerShell 7 及以上版本的新增功能,因此你无法使用 New-PSSession、Invoke-Command 走SSH协议连接Linux主机,直接使用系统已安装的OpenSSH原生工具链即可满足所有需求,具体实现步骤如下:

前置准备(可选,推荐)

配置SSH免密登录,避免脚本执行过程中需要人工输入密码:

  • 在Windows本地PowerShell执行 ssh-keygen 一路回车生成SSH密钥对,默认保存路径为 C:\Users\你的用户名\.ssh\id_rsa.pub
  • 执行 ssh user@linuxmachine "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" < C:\Users\你的用户名\.ssh\id_rsa.pub 将公钥上传到Linux主机的授权列表中

核心实现步骤

  • 第一步:远程执行命令生成文件
    直接通过原生ssh命令后接需要执行的远程命令即可,示例如下:

    # 示例:在Linux主机执行磁盘统计命令,结果写入/tmp/disk_report.log
    ssh user@linuxmachine "df -h > /tmp/disk_report.log"
    # 可通过$LASTEXITCODE判断命令是否执行成功,0为成功,非0为失败
    if ($LASTEXITCODE -ne 0) {
        Write-Error "远程命令执行失败"
        exit 1
    }
    

    如需执行多条命令,用分号分隔即可:ssh user@linuxmachine "cd /opt/project; sh build.sh > build_result.log"

  • 第二步:将生成的文件传输回Windows本地
    使用OpenSSH自带的scp命令实现文件拉取,示例如下:

    # 示例:将Linux上的/tmp/disk_report.log拉取到Windows本地D:\logs目录下
    scp user@linuxmachine:/tmp/disk_report.log D:\logs\
    if ($LASTEXITCODE -ne 0) {
        Write-Error "文件传输失败"
        exit 1
    }
    

完整脚本示例

# 自定义变量配置
$linuxUser = "root"
$linuxHost = "192.168.3.25"
$remoteFile = "/tmp/service_status.log"
$localPath = "D:\Operation_Logs\service_status_$(Get-Date -Format 'yyyyMMddHHmm').log"

# 远程执行命令生成文件
ssh "${linuxUser}@${linuxHost}" "systemctl status --type=service > ${remoteFile}"
if ($LASTEXITCODE -ne 0) {
    Write-Error "远程采集服务状态失败"
    exit 1
}

# 拉取文件到本地
scp "${linuxUser}@${linuxHost}:${remoteFile}" $localPath
if ($LASTEXITCODE -ne 0) {
    Write-Error "拉取日志文件失败"
    exit 1
}

Write-Host "执行成功,文件已保存至:$localPath"

注意事项

  • 如果路径包含空格,需要用引号包裹对应路径
  • 如需执行超级权限命令,免密配置后可直接在命令前加sudo,同时需要在Linux主机的/etc/sudoers中对应用户配置NOPASSWD权限

内容的提问来源于stack exchange,提问作者jgpadilla04

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 11:06:04