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

Windows下PowerShell处理OpenSSH密钥环境变量的转义问题求助

解决Drone CI Windows执行器中SSH密钥转义问题

问题描述

使用Drone CI的Windows执行器时,通过环境变量SSH_KEY传递OpenSSH密钥,PowerShell会将密钥中的反引号视为转义字符,导致密钥损坏。该密钥在Linux容器中可正常使用,但在Windows下被判定为格式无效,需要实现环境变量内容的原始处理(设置和读取阶段)。

解决方案

核心是绕开PowerShell对环境变量的自动解析,确保密钥的原始字符完整保留,具体修改如下:

1. 替换密钥写入命令

用.NET原生方法直接读取环境变量的原始值,再以ASCII编码写入文件,避免PowerShell的字符转义干扰:

[System.Environment]::GetEnvironmentVariable('SSH_KEY') | Set-Content -Path ssh_key -NoNewline -Encoding Ascii
  • [System.Environment]::GetEnvironmentVariable:绕开PowerShell的变量解析逻辑,直接获取环境变量的原始内容
  • -NoNewline:避免写入时额外添加换行符破坏密钥格式
  • -Encoding Ascii:匹配OpenSSH密钥的ASCII编码规范

2. 修改后的完整Drone配置

- name: copy to archive on remote host
  commands:
    - [System.Environment]::GetEnvironmentVariable('SSH_KEY') | Set-Content -Path ssh_key -NoNewline -Encoding Ascii
    - scp -i ssh_key file.zip user@host:/path/to/file.zip
    - rm ssh_key
  environment:
    SSH_KEY:
      from_secret: ssh_key

补充说明

Drone CI传递secret到环境变量的过程本身是原始的,不会修改内容,问题出在PowerShell读取和写入时的自动转义处理。上述方法直接绕过PowerShell的变量解析逻辑,确保密钥的每一个字符都被完整保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:12:45