Gitlab CI-CD 通过 ssh 连接到远程服务器时“操作超时”

问题描述 投票:0回答:1

我正在尝试在 gitlab 中设置一个部署管道到我的远程 Linux 服务器。 错误是:

$ ssh -p $SERVER_PORT -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "echo 1"
ssh: connect to host myhost port myport: Operation timed out

部署(.gitlab-ci.yml)脚本是:

deploy:
  image: alpine:latest
  stage: deploy
  tags:
    - deployment
  before_script:
    - 'command -v ssh-agent >/dev/null || ( apk add --update openssh )' 
    - eval $(ssh-agent -s)
    - cat "${ID_RSA}" | tr -d '\r' | ssh-add -
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
  script:
    - chmod 400 $ID_RSA
    - apk update && apk add openssh-client
    - ssh -p $SERVER_PORT -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "echo $SERVER_IP"

我在本地计算机上运行了相同的 ssh 命令(使用相同的 ID_RSA 密钥)并且它有效

ssh gitlab-ci gitlab-ci-runner
1个回答
0
投票

我在本地计算机上运行了相同的 ssh 命令(使用相同的 ID_RSA 密钥)并且它有效

我经常看到在我的公司中,某些客户端可以访问服务器,但其他客户端则无法访问服务器:网络路由并不总是向所有人开放。

作为诊断步骤,您可以在管道中添加一个步骤,将 ping 结果打印到服务器以检查网络连接。例如:

script:
    - apk add iputils
    - ping -c 4 $SERVER_IP
    - apk update && apk add openssh-client
    - ssh -p $SERVER_PORT -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "echo $SERVER_IP"

您还可以使用命令

curl -v telnet://$SERVER_IP:22
,检查端口 22 是否可达并正在侦听。

如果是,则检查 SSH 密钥权限:您已在

$ID_RSA
script
部分中将
.gitlab-ci.yml
密钥的权限设置为 400。
但是,由于您在
before_script
部分中使用密钥,因此您可能需要先设置权限,然后才能在
before_script
部分中使用它。

更新您的

.gitlab-ci.yml

before_script:
    - 'command -v ssh-agent >/dev/null || ( apk add --update openssh )' 
    - eval $(ssh-agent -s)
    - chmod 400 $ID_RSA
    - cat "${ID_RSA}" | tr -d '\r' | ssh-add -
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
script:
    - apk update && apk add openssh-client
    - ssh -p $SERVER_PORT -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "echo $SERVER_IP"
© www.soinside.com 2019 - 2024. All rights reserved.