linux - 如何将文件传输到主机并将密码传递给它
问题描述
我正在尝试将一些文件从 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).
我不知道我是否也需要添加公钥或只添加密码。如果是这样,我该怎么做?
或者有没有其他方法可以通过提供密码将文件发送到另一台服务器
解决方案
将您的密码添加到 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
推荐阅读
- maven - Android Studio - 找不到 intellij-core.jar
- rubygems - 尝试在 puppet master 上使用带有 R10k 的工头时遇到问题
- reactjs - reactjs axios拦截器如何调度注销操作
- python-3.x - 在放置组件时生成不与先前变量重叠的随机变量
- java - 我可以用 Java 为 Elementary OS AppCenter 进行开发吗?
- c# - 根据项中的属性替换数组项
- dax - 如何在表格 DAX 中使用逗号分隔变量进行过滤
- php - 完成当前周期后取消贝宝订阅
- vba - 如何在 Visio 中使用 VBA 获取形状数据?
- azure - Azure DevOps 中的 Azure ARM 模板密钥库覆盖