问题:如何将文件从主机复制到容器从内部正在运行的容器?
TL; TR :
想法:我使用的是gitlab服务器,我想使用Gitlab-ci
1.测试提交
2.将所有源文件收集到.tar中
3.最后将它们部署到另一台服务器
当前状态:我的.gitlab-ci.yml中定义了前3个作业。 1和2工作正常,但rsync会导致主机密钥验证失败。"错误当然。这是我的"稀疏"我的.gitlab-ci.yml文件的版本:
image: alpine
stages:
- test
- package
- deploy
test:
stage: test
script: bla bla testing bla bla
package:
stage: package
script: tar -cvf source.tar htdocs
deploy:
stage: deploy
before_script:
- apk update
- apk add rsync openssh
script:
- rsync -vuar source.tar servadmin@123.123.123.123:/home/servadmin/transfer
除了这个.yml文件,我无权访问这些容器,所以我真的需要找到一种方法将公钥从主机复制到容器,但我必须从容器内部完成。或者我可以使用多跑者等等,但我是ci的新手,我现在可以避免这种情况
答案 0 :(得分:1)
我找到了一个灵感来自上述评论的解决方法,我找到了一个我无法回忆的例子: 1. Dockerfile:
FROM alpine
COPY id_rsa /root/.ssh/
。
deploy:
stage: deploy
before_script:
- apk update
- apk add rsync openssh
- mkdir -p /root/.ssh
- eval "$(ssh-agent -s)"
- echo " IdentityFile ~/.ssh/id_rsa" >> /etc/ssh/ssh_config
# install ssh-agent
- 'which ssh-agent || ( apk update -y && apk add openssh-client -y )'
# run ssh-agent
- eval $(ssh-agent -s)
#copy key to file
- cp /root/.ssh/id_rsa ./key.file
- chmod 600 ./key.file
# add ssh key stored in SSH_PRIVATE_KEY variable to the agent store
- ssh-add ./key.file
# disable host key checking (NOTE: makes you susceptible to man-in-the-middle attacks)
# WARNING: use only in docker container, if you use it with shell you will overwrite your user's ssh config
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
script:
- rsync -arvvvce "ssh -o StrictHostKeyChecking=no" source.tar servadmin@123.123.123.123:/home/servadmin/transfer
我猜-arvvvce "ssh -o StrictHostKeyChecking=no"
可以替换为-vuar
但未经过测试。