我想使用gitlab-ci运行部署脚本,但是步骤ssh-add $SSH_PRIVATE_KEY
返回错误:
echo "$SSH_PRIVATE_KEY" | ssh-add -
Error loading key "(stdin)": invalid format
您可以看到我的.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
在我的项目设置中,我已经从生产服务器cat ~/.ssh/id_rsa.pub
中添加了SSH_PRIVATE_KEY变量和id_rsa。
有人可以帮助我吗?
答案 0 :(得分:6)
就我而言,我不得不在SSH_PRIVATE_KEY
变量的末尾添加新行
答案 1 :(得分:2)
我犯了一个愚蠢的错误,并添加了没有-----BEGIN RSA PRIVATE KEY-----
和-----END RSA PRIVATE KEY-----
子句的密钥。
总结一下,您应该添加:
-----BEGIN RSA PRIVATE KEY-----
<< the key itself goes here >>
-----END RSA PRIVATE KEY-----
此外,请确保在结束符后有换行符。
答案 2 :(得分:1)
答案 3 :(得分:1)
默认情况下,它是〜/ .ssh / id_rsa.pub中的SSH公钥。
私钥包含在〜/ .ssh / id_rsa
中答案 4 :(得分:1)
确保文件变量末尾的换行符存在。如果没有,就会出现以下错误:
function testpromise(){
return new Promise((resolve, reject)=>{
reject("Error");
})
}
testpromise()
.then(()=>{console.log("Then")})
.catch((err)=>{console.log(err)})
在此示例中,Load key "/home/.../....tmp/ID_RSA": invalid format
[MASKED]@...: Permission denied (publickey).
是我的文件变量。
答案 5 :(得分:0)
使用
SSH_PRIVATE_KEY: |
-----BEGIN OPENSSH PRIVATE KEY-----
代替
SSH_PRIVATE_KEY: >
-----BEGIN OPENSSH PRIVATE KEY-----
'|'将保存换行符'\ n'
答案 6 :(得分:0)
它与变量扩展一起使用(双括号中的花括号):
- echo "${SSH_PRIVATE_KEY}" | ssh-add -
同时保护SSH_PRIVATE_KEY
变量!
此方法只是打印变量的less ambiguous method;在这种情况下,它会阻止最后一个换行符的修剪。
答案 7 :(得分:0)
就我而言,这是因为我已将SSH_PRIVATE_KEY变量设置为在特定环境中可用。我将其更改为我正在使用的(或者您可以将其更改为全部,具体取决于您的设置)。
答案 8 :(得分:0)
如果您从 PuTTYgen 导出密钥,则要使用其命令对话-导出OpenSSH密钥(强制采用新文件格式) << / p>
修剪最后的空格并添加新行。
答案 9 :(得分:0)
我在gitlab和bitbucket上遇到了这个问题,都解决了在密钥文件末尾添加\ n的问题。
x = "simpleOriginDate"
答案 10 :(得分:0)
您必须复制文件(id_rsa)的全部内容,包括最后的空白行。我用这种方法解决了这个问题。
答案 11 :(得分:-1)
我让它使用受保护的变量。
如果变量是文件,则echo
将不再起作用:
cat "$SSH_PRIVATE_KEY" | ssh-add -
否则;如果变量不是文件,请使用以下命令:
echo "$SSH_PRIVATE_KEY" | ssh-add -