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
相关产品推荐
相关产品推荐

