前言
由于习惯了使用drone做CI/CD,但是某些情况下我们是无法直接通过ssh连接到服务器的。比如我们的服务器在某个专有云内;又或者我们不想把ssh映射到公网;又或者我们无法直接ssh。 于是我们今天的主角就诞生了:drone-remote-agent.
介绍
drone-remote-agent实现通过websocket代理执行ssh命令,支持上传脚本到服务器并且代理执行,并且整个websocket通信都经过加密。
特性
- 支持批量文件上传
- 支持批量命令执行
- 只支持SSH使用账号密码认证
- 整个通信使用AES+RSA进行加密
开始使用
秘钥公钥生成
openssl genrsa -out rsa_private_key.pem 1024
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
部署服务端
在服务器上部署插件并且以agent
模式启动,这里使用docker来示意:
docker pull pumelo/dra
docker run -d -v /path:/path --mode agent --prk /path/rsa_private_key.pem
这里注意下需要把私钥上传到服务器,并且映射到容器内。
Drone中step配置
在.drone.yml
中新增一个步骤
steps:
- name: deploy-container
pull: if-not-exists
image: pumelo/dra
volumes:
- name: wsKey
path: /dra
settings:
agent-endpoint: 10.10.0.27:8080
ssh-host: 10.10.0.27:22
ssh-username: root
ssh-password: 123456
publicKeyFilePath: /dra/rsa_public_key.pem
script: # 远程执行脚本
- docker pull 10.10.0.14:5000/nginx:1.15
- docker run -d \
- --name=test-nginx-a \
- -p8877:80 \
- 10.10.0.14:5000/nginx:1.15
upload: # 上传文件列表,只支持文件,文件夹会自动忽略 local:remote
- ./README.md:/data/README.md
源码
pumelotea/drone-remote-agent: drone通过websocket通道执行ssh脚本 (github.com)