Gitlab CI - 在Bash中设置SSH密钥

时间:2017-10-09 03:10:22

标签: ssh gitlab-ci

我在SSH keys when using the Docker executor上关注gitlab的文档来设置与我的远程服务器的连接,该服务器按预期工作。

before_script:
  - which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )
  - eval $(ssh-agent -s)
  - ssh-add <(echo "$SSH_PRIVATE_KEY")
  - mkdir -p ~/.ssh
  - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'

但是,我想将这些命令放在一个单独的脚本中:

before_script:
  - bash ./scripts/ssh-config.sh

ssh-config.sh

#!/bin/bash
which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )
eval $(ssh-agent -s)
ssh-add <(echo $SSH_PRIVATE_KEY)
mkdir -p ~/.ssh
[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config

尝试连接到远程服务器时,会出现以下错误:

$ bash scripts/ssh-config.sh
/usr/bin/ssh-agent
Agent pid 15
Identity added: /dev/fd/63 (/dev/fd/63)
$ ssh op@example.com "touch test"
Warning: Permanently added 'example.com' (ECDSA) to the list of known hosts.    
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).

脚本似乎已正确执行,并输出与之前方法相同的日志。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

运行ssh-add时要么使用source,要么使用。这样脚本在同一个shell中运行,如果你当前shell中的ssh-agent没有新密钥。因此,在您的情况下,您将执行以下操作。

before_script:
  - . ./scripts/ssh-config.sh

before_script:
  - source ./scripts/ssh-config.sh

从一个措辞不好的类似问题改编答案。 Here是最初的。

注意:由于您已在脚本中使用bash,因此无需#!/bin/bash