【问题标题】:How can I transfer files to a host and pass password to it如何将文件传输到主机并将密码传递给它
【发布时间】:2019-04-03 17:34:45
【问题描述】:

我正在尝试将一些文件从 gitlab ci 复制到我的主机。我目前正在将open-sshclient 与 scp 一起使用,但它会引发错误:

user@ip: 权限被拒绝(公钥、密码)。

我不知道如何将密码传递给脚本。

这是我的.gitlab-ci.yml 文件:

image: node:9.6.1

cache:
  paths:
    - node_modules/
    - build/
    - docker-compose.yml
    - Dockerfile
    - nginx.conf

stages:
  - build
  - dockerize

build-stage:
  stage: build
  script:
    - npm install
    - CI=false npm run build
  artifacts:
    untracked: true
    paths:
      - build/
      - docker-compose.yml
      - nginx.conf

dockerize-stage:
  stage: dockerize
  image: tmaier/docker-compose:latest
  services:
    - docker:dind
  dependencies:
    - build-stage
  tags:
    - docker  
  script:
    - apk update
    - apk add --no-cache openssh-client
    - mkdir ~/.ssh
    - eval $(ssh-agent -s)
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
    - echo "${USER_PASS}" || ssh-add -
    - ssh -p22 user@ip "mkdir /home/test"
    - scp -P22 -r build/* user@ip:/home/test

虽然这是 gitlab ci 的输出:

$ apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/community/x86_64/APKINDEX.tar.gz
v3.8.4-9-g931e9aefbb [http://dl-cdn.alpinelinux.org/alpine/v3.8/main]
v3.8.4-4-gc27a9a0149 [http://dl-cdn.alpinelinux.org/alpine/v3.8/community]
OK: 9550 distinct packages available
$ apk add --no-cache openssh-client
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/community/x86_64/APKINDEX.tar.gz
(1/2) Installing openssh-keygen (7.7_p1-r4)
(2/2) Installing openssh-client (7.7_p1-r4)
Executing busybox-1.28.4-r1.trigger
OK: 67 MiB in 28 packages
$ mkdir ~/.ssh
$ eval $(ssh-agent -s)
Agent pid 20
$ [[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
$ echo "${USER_PASS}" || ssh-add -
"IT SHOWS THE PASSWORD"
$ ssh -p22 user@ip "mkdir /home/test"
Warning: Permanently added 'ip' (ECDSA) to the list of known hosts.
Permission denied, please try again.
Permission denied, please try again.
user@ip: Permission denied (publickey,password).

我不知道我是否也需要添加公钥或只添加密码。如果是这样,我该怎么做?

或者有没有其他方法通过提供密码将文件发送到另一台服务器

【问题讨论】:

    标签: linux docker ubuntu ssh gitlab


    【解决方案1】:

    将您的密码添加到 Gitlab 秘密变量中,例如 - DEPLOY_SSH_PASSWORD(在项目设置中的某处)并使用它:

    sshpass -p $DEPLOY_SSH_PASSWORD ssh user@ip
    

    但我建议你使用私钥,这样更安全。 将您的私钥添加到 Gitlab 秘密变量中,例如 - DEPLOY_SSH_KEY,将私钥复制到运行器上的临时文件:

    - echo "$DEPLOY_SSH_KEY" > ~/.ssh/id_rsa
    

    然后使用它:

    - ssh -i ~/.ssh/id_rsa user@ip
    

    【讨论】:

    • 秘密变量位于此处:项目 -> 设置 -> CI/CD -> 环境变量
    • 现在它的说法是:$ ssh -i ~/.ssh/id_rsa user@ipPseudo-terminal will not be allocated because stdin is not a terminal.Host key verification failed.
    • 我在我的主机中通过ssh-keygen -t rsa 生成了rsa,并在~/.ssh 下保存为id_rsaid_rsa.pub。我把id_rsa.pub的内容放在环境变量中
    • 您需要将密钥的私有部分放入变量中,例如文件id_rsa
    • @QuasWex 我也尝试添加 id_rsa 内容太 env 变量但仍然相同
    【解决方案2】:

    你需要有服务器的私钥

    scp -C -i <link to your private key> -r <source_directory> username@ip:<target_directory>
    

    如果你只是想 ssh

    ssh -i <link to your private key> username@ip
    

    【讨论】:

    • 两者都显示:Host key verification failed. 我在主机中通过 ssh-keygen -t rsa 生成了 rsa,并将其保存为 ~/.ssh 下的 id_rsa 和 id_rsa.pub。我把 id_rsa.pub 的内容放在环境变量中
    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 2022-01-12
    • 2011-02-23
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多