我想使用 gitlab-ci 运行部署脚本,但步骤 ssh-add$SSH_PRIVATE_KEY返回错误:
echo "$SSH_PRIVATE_KEY" | ssh-add -
Error loading key "(stdin)": invalid format
Run Code Online (Sandbox Code Playgroud)
你可以看到我的.gitlab-ci.yml:
deploy:
image: node:9.11.1-alpine
stage: deploy
before_script:
# Install ssh-agent if not already installed, it is required by Docker.
# (change apt-get to yum if you use a CentOS-based image)
- 'which ssh-agent || ( apk add --update openssh )'
# Add bash
- apk add --update bash
# Add git
- apk add --update git
# Run ssh-agent (inside the build environment)
- eval $(ssh-agent -s)
# Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
- echo "$SSH_PRIVATE_KEY"
- echo "$SSH_PRIVATE_KEY" | ssh-add -
# For Docker builds disable host key checking. Be aware that by adding that
# you are suspectible to man-in-the-middle attacks.
# WARNING: Use this only with the Docker executor, if you use it with shell
# you will overwrite your user's SSH config.
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
# In order to properly check the server's host key, assuming you created the
# SSH_SERVER_HOSTKEYS variable previously, uncomment the following two lines
# instead.
# - mkdir -p ~/.ssh
# - '[[ -f /.dockerenv ]] && echo "$SSH_SERVER_HOSTKEYS" > ~/.ssh/known_hosts'
script:
- npm i -g pm2
- pm2 deploy ecosystem.config.js production
# only:
# - master
Run Code Online (Sandbox Code Playgroud)
在我的项目设置中,我已经添加了 SSH_PRIVATE_KEY 变量,以及来自我的生产服务器的 id_rsa cat ~/.ssh/id_rsa.pub。
任何人都可以帮助我吗?
pan*_*909 46
就我而言,这是因为我已将SSH_PRIVATE_KEY 变量设置为 protected。当我禁用受保护状态时,它工作没有任何错误。
它适用于变量扩展(双字符串引号中的大括号):
- echo "${SSH_PRIVATE_KEY}" | ssh-add -
Run Code Online (Sandbox Code Playgroud)
同时保持SSH_PRIVATE_KEY变量受保护!
这种方法只是一种不太模糊的打印变量的方法;在这种情况下,它会阻止修剪最后一个换行符。
确保文件变量末尾后存在换行符。如果没有的话,就会出现下面的错误:
Load key "/home/.../....tmp/ID_RSA": invalid format
[MASKED]@...: Permission denied (publickey).
Run Code Online (Sandbox Code Playgroud)
在这个例子中,这ID_RSA是我的文件变量。
我犯了一个愚蠢的错误并添加了没有-----BEGIN RSA PRIVATE KEY-----和-----END RSA PRIVATE KEY-----条款的键。
总结一下,你应该补充:
-----BEGIN RSA PRIVATE KEY-----
<< the key itself goes here >>
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
此外,确保存在关闭后的换行符。
我让它与受保护的变量一起工作。
如果变量是文件,echo将不再起作用:
cat "$SSH_PRIVATE_KEY" | ssh-add -
Run Code Online (Sandbox Code Playgroud)
否则; 如果变量不是文件,请使用以下命令:
echo "$SSH_PRIVATE_KEY" | ssh-add -
Run Code Online (Sandbox Code Playgroud)
如果您从PuTTYgen导出密钥,要获取密钥内容,请使用其命令Conversations - Export OpenSSH key(强制使用新文件格式)
并修剪最后一个空格并添加新行。
| 归档时间: |
|
| 查看次数: |
22844 次 |
| 最近记录: |