如果通过GitLab CI进行SSH到远程服务器的操作被拒绝

时间:2019-11-04 20:56:44

标签: ssh gitlab gitlab-ci gitlab-ci-runner rhel7

我们有一台RHEL 7远程服务器,我在其中创建了一个名为gitlabci的虚拟用户。

  • 通过SSH进入远程服务器时,我生成了一个公私钥对(用于从GitLab抓取文件时使用)
    • 将公用密钥作为deploy key上载,以供我们在设置CI后使用
  • 在本地计算机中生成了另一个公私钥对(用于从GitLab Runner SSH进入远程服务器时使用)
    • 将公钥添加到远程服务器的authorized_keys
    • 将私钥添加到项目的CI environment variables

这个想法是当CI运行时,GitLab运行程序将以我创建的gitlabci用户的身份通过SSH进入远程服务器,然后使用部署密钥将分支提取到Web目录中。

我以为我已经正确设置了密钥,但是每当跑步者尝试进行SSH时,连接都会被拒绝。

$ which ssh-agent || ( apt-get update -y && apt-get install openssh-client git -y )
...
$ eval $(ssh-agent -s)
Agent pid 457
$ echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
Identity added: (stdin) (GitLab CI)
$ mkdir -p ~/.ssh
$ chmod 700 ~/.ssh
$ [[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
$ ssh gitlabci@random.server.com
Pseudo-terminal will not be allocated because stdin is not a terminal.
ssh: connect to host random.server.com port 22: Connection refused
ERROR: Job failed: exit code 1

当我尝试使用本地密钥对通过本地计算机上的GitBash SSH到远程服务器时,它确实起作用了。

$ ssh -i ~/.ssh/gitlabci gitlabci@random.server.com
Last login: Mon Nov  4 13:49:59 2019 from machine01.work.server.com

1 个答案:

答案 0 :(得分:2)

ssh: connect to host random.server.com port 22: Connection refused

“拒绝连接”表示ssh客户端向指定的主机和端口发送了连接请求,并且作为响应,它收到了所谓的“重置”数据包,表明远程服务器拒绝接受连接。 / p>

如果您可以从一台主机连接到random.server.com,但又被另一台主机拒绝连接,那么您会想到一些可能的解释:

  1. 您的.ssh / config文件中可能会有一个条目,该条目用random.server.com替代了其他名称或地址。例如,当您请求random2.server.com时,类似下面的条目将导致ssh连接到random.server.com

    Host random.server.com
        Hostname random2.server.com
    
  2. “ random.server.com”的IP地址查找以某种方式返回了错误的地址,因此ssh试图连接到错误的服务器。例如,某人可能已为该主机名在/etc/hosts中添加了一个条目。

  3. 某些防火墙或其他数据包检查软件通过响应伪造的复位数据包来干扰连接尝试。