为什么 Gitlab CI 运行 在本地而不是在远程机器上命令?

Why Gitlab CI run commands locally and not on remote machine?

我听不懂。我在工作期间使用 ssh 成功登录到我的远程主机,我想确保我可以 运行 在此主机上执行命令。所以我有这样的工作:

Deliver image to host:
  stage: deploy
  before_script:
    # Setup SSH deploy keys
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    - mkdir -p ~/.ssh
    - echo "$PRIVATE_SSH" | tr -d '\r' > ~/.ssh/id_rsa
    - chmod 700 ~/.ssh/id_rsa

  script:
    - ssh -o StrictHostKeyChecking=no <user>@<ip>
    - ls

并且 ls 给我 gitlab 运行ner 机器的输出:我看到我的存储库,而不是远程机器的项目。
为什么?我应该如何 运行 远程命令?

我认为你的问题出在这里:

    - ssh -o StrictHostKeyChecking=no <user>@<ip>
    - ls

gitlab上的第一个命令运行s ssh运行ner。 ssh 此时不是交互式的(没有键盘连接到此处的 ssh 会话)。所以 ssh 退出。然后你 运行 ls 在 gitlab 运行ner 上,它给你奇怪的输出你感到惊讶。

您想通过提供额外的东西作为参数来告诉 ssh 命令您想让它做什么。所以尝试:

    - ssh -o StrictHostKeyChecking=no <user>@<ip> ls

有关如何准确地向 ssh 调用提供命令和参数的更多信息,请参阅 How to execute a remote command over ssh with arguments? and How do I pass arbitrary arguments to a command executed over SSH? 等其他答案。