资讯专栏INFORMATION COLUMN

ssh 执行远程主机命令的自动化 bash 脚本

ASCH / 2298人阅读

摘要:在远程主机中运行命令的语法最近的一个项目中,我们前端需要自己发布静态资源到远程目标服务器上,中间需要经过一个跳板机为什么不用公司内部的方式发布,原因很多,这里就不表述了。

TLDR;
在远程主机中运行命令的 shell 语法:

$: ssh user@host "commands"

最近的一个项目中,我们前端需要自己发布静态资源到远程目标服务器上,中间需要经过一个跳板机(为什么不用公司内部的 GitLab 方式发布,原因很多,这里就不表述了)。前端如果手动发布的话需要经过以下步骤:

把所有静态资源压缩成一个 tgz 包

把压缩包 scp 到跳板机

ssh 到跳板机

把压缩包从跳板机 scp 到静态资源的目标主机

ssh 到目标主机

解压缩压缩包到指定目录

执行 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 语法,就可以通过自动化脚本节省了大量的时间去泡妹子,好开心。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/80532.html

相关文章

  • SSH 通过公钥连接云服务器

    摘要:通常我们连接远程服务器下通过或等工具远程连接。你的这样就算成功了,在运行,即可连接上你的服务器。密码可以弄得复杂些,然后通过这样的方式连接云服务器。当然如果你不想用命令,那你就得记住这个单词原文在我的博客通过公钥连接云服务器 通常我们连接远程服务器(linux)windows下通过putty或xshell等工具远程连接。linux下可以直接通过ssh命令连接。 其实这两者都是一致的,都...

    leoperfect 评论0 收藏0
  • 【SHELL】深入理解脚本环境变量存取过程

    摘要:前言楼主最近在研究,以及环境下脚本执行发现环境变量的配置有时候读取失败同时在切换角色的时候如和实际上的读取环境配置是不一样的大致介绍这里接下来进入正题。 前言 楼主最近在研究 jenkins ,gitlab-ci, 以及node环境下js脚本执行.发现环境变量的配置有时候读取失败. 同时在切换角色的时候, 如 su - user 和 su user 实际上的读取环境配置是不一样的. 大...

    svtter 评论0 收藏0
  • 使用Jenkins通过Publish Over SSH插件远程控制主机执行脚本

    摘要:环境介绍角色系统版本版本准备工作在被远程主机上准备好脚本文件。禁止在目标机上执行命令,勾选后将会忽略在配置中选项中设置的命令。服务使用的用户名,使用进行连接时为指定的用户名。在这里填写在远程主机上执行的命令。 ...

    MycLambert 评论0 收藏0
  • 如何用 Docker 实现 PHP 命令行程序 CI/CD

    摘要:数人云今天带来的文章将分享如何用实现命令行程序的过程中整体思路以及需要注意哪些问题。月日,超越传统运维之道的话题将在北京延续,四位业界大牛技术齐聚,结合传统运维现状及实践案例,讲述的超越之道。 数人云今天带来的文章将分享如何用Docker实现PHP命令行程序的CI/CD过程中整体思路以及需要注意哪些问题。 6月10日,《DevOps&SRE超越传统运维之道》的话题将在北京延续,四位业界...

    Pink 评论0 收藏0
  • 如何用 Docker 实现 PHP 命令行程序 CI/CD

    摘要:数人云今天带来的文章将分享如何用实现命令行程序的过程中整体思路以及需要注意哪些问题。月日,超越传统运维之道的话题将在北京延续,四位业界大牛技术齐聚,结合传统运维现状及实践案例,讲述的超越之道。 数人云今天带来的文章将分享如何用Docker实现PHP命令行程序的CI/CD过程中整体思路以及需要注意哪些问题。 6月10日,《DevOps&SRE超越传统运维之道》的话题将在北京延续,四位业界...

    stdying 评论0 收藏0

发表评论

0条评论

ASCH

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<