ssh 实行长途主机敕令的自动化 bash 剧本

TLDR;
在长途主机中运转敕令的 shell 语法:

$: ssh user@host "commands"

近来的一个项目中,我们前端须要自身宣布静态资本到长途目的服务器上,中心须要经由一个跳板机(为何不必公司内部的 GitLab 体式格局宣布,缘由许多,这里就不表述了)。前端假如手动宣布的话须要经由以下步骤:

  1. 把一切静态资本压缩成一个 tgz 包

  2. 把压缩包 scp 到跳板机

  3. ssh 到跳板机

  4. 把压缩包从跳板机 scp 到静态资本的目的主机

  5. ssh 到目的主机

  6. 解压缩压缩包到指定目次

  7. 实行 py 剧本,宣布到 cdn

从上面的步骤能够看出假如手动宣布一个服务器,也许须要经由7个步骤,每次宣布都须要最少 4-5 分钟时刻守候(我们有 12 台须要宣布的机械,每次宣布都须要 4(从第 3 步最先反复 12 次) * 12 分钟),而且假如收集不太好的话,守候的时刻就更长了;更不要说手动宣布的时刻会常常忘了步骤且更轻易出错了,每次宣布都彷佛回到了原始时代。

万幸的是 ssh 自身支撑在长途主机中运转敕令的,语法就是

$: ssh user@host "command1; command2; command3; ...."

此处的 command 应该用 "" 包起来,防止 ; 被当地主机当作定界符处置惩罚。 ok,晓得 ssh 的用法,我们写个 bash 处置惩罚一下上面 7 个步骤:

# 打压缩包并上传到跳板机的指定目次
function compress() {
    tar -zcvf sc.tgz -C build . && scp -r sc.tgz root@xxx.xxx.xxx.xxx:~/oss_download/demo/
}

# 经由过程 ssh 登录跳板机实行 3 - 7 步
# 注意在跳板机跳登录到目的服务器的时刻须要 ssh -tt ,能够在长途机械上 ssh 到其他的长途主机并实行。细致的诠释经由过程 man ssh 检察
# mkidr -p 是假如目的机械不存在这个目次,就先建立这个目次,保证 cd 或许 tar 的时刻不会由于目的目次不存在而引发报错

function send() {
    ssh root@xxx.xxx.xxx.xxx "scp -r oss_download/demo/sc.tgz alibaba@${1}:~/ossdowload/data/demo/ ; ssh -tt alibaba@${1} 'mkdir -p ossdowload; cd ossdowload; mkdir -p data/demo/sc/${version}; tar -zvxf data/demo/sc.tgz  -C data/demo/sc/${version}  && rm -rf data/demo/sc.tgz &&  ./ceph_tmp.py'"
}

# 实行 compress 和 send 函数
function deploy() {
    compress
    send ${1}
}

# 发送到目的服务器
deploy yyy.yyy.yyy.yy

这是宣布到一个长途主机的敕令的剧本,是否是很简朴?以后假如想宣布到多个长途主机,只需经由过程简朴的 while 语句就能够搞定;到这里就算完毕了,大多数时刻前端只须要控制简朴的 bash 语法,就能够经由过程自动化剧本节省了大批的时刻去泡妹子,好开心。

    原文作者:zwhu
    原文地址: https://segmentfault.com/a/1190000007024071
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞