通过 SSH 方式的 rsync 将文件同步到远程主机,并在远程主机上执行任意命令
注意:远程主机中需要已安装 rsync。无需额外配置 rsync 守护进程,直接使用 SSH 通道传输数据
简单示例,将本地 dist 文件夹同步到远程机器的 ~/target 目录:
123 示例一:使用 SSH 密钥登录远程主机
# .cnb.yml
main:
push:
- stages:
- name: rsync
image: tencentcom/rsync
# 引用密钥仓库配置文件
imports: https://your-git.com/group/secret-repo/-/blob/main/env.yml
settings:
user: $LOGIN_USER
key: $PRIVATE_KEY
hosts:
- ip1
- ip2
source: ./dist/
target: ~/target/
# 以上为必填参数,以下为可选参数
port: 22
include:
- "app.tar.gz"
- "app.tar.gz.md5"
exclude:
- "*"
prescript:
- cd ~/packages
- md5sum -c app.tar.gz.md5
- tar -xf app.tar.gz -C ~/app
script:
- cd ~/packages
- md5sum -c app.tar.gz.md5
- tar -xf app.tar.gz -C ~/app
引用密钥仓库配置文件获取 rsync key 和 rsync user:
# 密钥仓库 env.yml
# ssh 登录私钥
PRIVATE_KEY: |
-----BEGIN RSA PRIVATE KEY-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END RSA PRIVATE KEY-----
# ssh 登录用户
LOGIN_USER: xxx
# 声明指定镜像的插件任务能引用该配置文件
allow_images:
- tencentcom/rsync
# 声明指定仓库的流水线能引用该配置文件
allow_slugs:
- groupname/reponame
示例二:使用 SSH 密码登录远程主机
# .cnb.yml
main:
push:
- stages:
- name: rsync
image: tencentcom/rsync
# 引用密钥仓库配置文件
imports: https://your-git.com/group/secret-repo/-/blob/main/env.yml
settings:
user: $LOGIN_USER
password: $PASSWORD
hosts:
- ip1
- ip2
source: ./dist/
target: ~/target/
# 以上为必填参数,以下为可选参数
port: 22
include:
- "app.tar.gz"
- "app.tar.gz.md5"
exclude:
- "*"
prescript:
- cd ~/packages
- md5sum -c app.tar.gz.md5
- tar -xf app.tar.gz -C ~/app
script:
- cd ~/packages
- md5sum -c app.tar.gz.md5
- tar -xf app.tar.gz -C ~/app
引用密钥仓库配置文件获取 rsync key 和 rsync user:
# 密钥仓库 env.yml
# ssh 登录用户
LOGIN_USER: xxx
# ssh 登录密码
PASSWORD: xxx
# 声明指定镜像的插件任务能引用该配置文件
allow_images:
- tencentcom/rsync
# 声明指定仓库的流水线能引用该配置文件
allow_slugs:
- groupname/reponame
user 用于登录远程机器的用户,默认为 rootkey 用于访问远程机器的 ssh 私钥,key 和 password 二选一,优先使用 passwordpassword 用于访问远程机器的 ssh 密码,key 和 password 二选一,优先使用 passwordhosts 远程机器的主机名或 IP 地址port 远程机器的连接端口,默认为 22source 要同步的源文件夹,默认为 ./target 要同步到远程机器上的目标文件夹include rsync 的包含过滤器exclude rsync 的排除过滤器recursive 是否递归同步,默认为 falsedelete 是否删除目标文件夹的内容,默认为 falseargs 指定插件使用这些额外的 rsync 命令行参数,例如:"--blocking-io"prescript 在 rsync 执行之前在远程机器上运行的命令列表script 在 rsync 执行之后在远程机器上运行的命令列表log_level SSH 日志级别,默认为安静模式(quiet)在 drone-rsync 基础上修改
1、生成密钥对
# 生成公钥 id_rsa.pub 和私钥 id_rsa
ssh-keygen -t rsa
2、将公钥 id_rsa.pub 文件的内容添加到远程机器的 ~/.ssh/authorized_keys 文件中
可直接将 id_rsa.pub 文件的内容复制粘贴到 ~/.ssh/authorized_keys 文件中,也可使用如下命令:
# windows 机器不支持此命令,mac/linux 机器支持
ssh-copy-id -p 22 root@123.123.123.123
3、将私钥 id_rsa 的内容添加到密钥仓库中,在流水线中传入 PRIVATE_KEY,插件即可使用密钥免密登录。
详见上方示例
123