如何使用shell在多服务器上批量操作
作者:枕边书 发布时间:2023-08-28 21:09:12
SSH 协议
说公钥登陆之前,先来说一下 SSH 协议。
SSH 是一种网络协议,我们常说的 ssh 一般指其实现,即 OpenSSH,在 shell 中,也就是 ssh 命令。
SSH
Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。 SSH通过在网络中建立安全隧道来实现SSH客户端与服务器之间的连接。
SSH 的原理跟 HTTPS 差不多,都是基于 TCP 和 非对称加密进行的应用层协议。它跟 HTTPS 的不同之处在于 HTTPS 通过数字证书和数字证书认证中心来防止中间人攻击,而 ssh 服务器的公钥没有人公证,只能通过其公钥指纹来人工确定其身份。
如下图所示,我们第一次使用 ssh 登陆某台服务器时, ssh 会提示我们验证服务器的公钥指纹。
当我们验证此公钥指纹是我们要登陆的服务器后,服务器的公钥会被添加到~/.ssh/known_hosts里,再登陆时,ssh 检测到是已认证服务器后就会跳过公钥验证阶段。
建连过程
关于通信加密的概念,我在之前的文章也有所介绍,参见:再谈加密-RSA非对称加密的理解和使用。至于 SSH 协议的建连过程,则可以参阅:Protocol Basics: Secure Shell Protocol。
总结起来主要包括以下步骤:
TCP 三次握手
SSH 协议版本协商
客户端与服务端的公钥交换
加密算法协商
客户端使用对称加密的密钥认证
客户端与服务端安全通信
我使用 tcpdump + wireshark 抓包并查看了一下其 SSH 的建连过程,如下图所示:
不得不再次感叹 tcpdump + wireshark 是学习网络协议的真神器。
ssh 工具
ssh
作为工具, ssh 分为服务端和客户端,在服务端,它是sshd,一般占用 22 端口。我们平常使用的是其客户端,一般用法为ssh user@host,然后根据 ssh 的提示,我们输入密码后登陆到服务器。
它的功能非常强大,看其支持参数就知道了。
ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address] [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]] [user@]hostname [command]
介绍完了 SSH 协议和 ssh 命令,终于说到公钥登陆了。
公钥登陆
理解了非对称加密的原理后,再公钥登陆会非常简单。由于公私钥是唯一的一对,在客户端保障自己私钥安全的情况下,服务端通过公钥就可以完全确定客户端的真实性,所以要实现公钥登陆,我们就要先生成一个公私密钥对。
通过ssh-keygen命令来生成密钥对,为了让步骤更完整,我把它们暂时保存到工作目录,默认会保存到~/.ssh目录。
~ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/zbs/.ssh/id_rsa): ./test
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ./test.
Your public key has been saved in ./test.pub.
The key fingerprint is:
SHA256:xxxxx/B17z/xxxxxx zbs@zbs.local
The key's randomart image is:
+---[RSA 2048]----+
| o+*.. EO* |
| .... |
| oo+ .o++.o|
+----[SHA256]-----+
~ ls ./test*
./test ./test.pub
把私钥文件 ./test 的内容放到客户端的 ~/.ssh/id_rsa,再使用密码试登陆到服务器后,将公钥内容./test.pub里的内容放到服务器的 ~/.ssh/authorized_keys。
再次登陆时,ssh 会自动使用自己的私钥来认证,也就避免了输出密码。
批量操作
公钥登陆帮我们避免了每次登陆服务器要输出密码的麻烦,它同时也解决了每个登陆会话都会同步阻塞的问题,这样我们就可以利用 ssh 的ssh user@host command方式来直接在服务器上执行命令。
同时,在我们拥有一个 ip 列表的情况下,使用 for 循环遍历 ip 列表,在多个服务器上批量执行命令也就成为了可能。
多服务器文件合并
前几天,帮同事在多个服务器上查找日志,需要把在多个服务器上查到的日志都汇总到同一台机器上进行统计分析。我是用 pssh 登陆的多个服务器,由于日志量太大,查出来的结果输出到终端上再复制有些不现实,而使用重定向,结果又会重定向到各自的服务器。
scp
这时候可以使用scp,scp 跟 ssh 是同一家族的命令,也是基于 SSH 协议实现的安全传输协议。只要在各个服务器之间互相保存着对方的公钥,就可以跟 ssh 命令一样,实现免密操作。
scp 的常见用法是scp src dst,其中远程路径可以表示为user@host:/path。在批量登陆的情况下,可以使用 grep 等命令先把结果文件输入到一个文件中,再使用 scp 命令将其复制到同一台服务器。
为了避免各个服务器的文件名冲突,可以使用uuidgen | xargs -I {} scp result.log root@ip:/result/{}将各个服务器的结果复制到不同的文件中,再使用 cat 将 result 文件夹中的文件合并到一块。
nc
当然,大多数情况下,我们的服务器之间并不会互相保存公钥,不过nc命令可以完美解决这个问题。
nc 的-k选项,可以让 nc 服务端在文件传输结束后保持连接不关闭。这样,我们使用nc -k -4l port > result.log启动一个 nc 服务端,再使用grep xxx info.log | nc ip port即可实现结果数据的合并。
小结
本文介绍的各个工具还是属于开发的小打小闹,了解多一些工具总是好的。如果做运维工作的话,还是需要依赖 OPS 平台集成更多功能,实现完整的自动化。
来源:https://www.cnblogs.com/zhenbianshu/p/10651195.html


猜你喜欢
- 对于研究SEO(搜索引擎优化)的朋友来说,都喜欢研究收集整理一些SEO工具。有些SEO工具是查询性质的,也有一些黑帽性质的,秦爱在这里给出的
- 在项目越来越多的时候,部署在tomcat的发布包也会越来越多,这样难免有很多相同的jar会被加载,占用大量的永久存续区内存,通过设定shar
- Godaddy主机用户可以使用一个基于网络的FTP客户端用Hosting Control Center上载、下载其网站上的文档。注意:尽管你
- SEO 就是搜索引擎优化,目的是使你的 Blog 在搜索引擎的搜索结果中的排名得到提高,从而让搜索引擎给你的 Blog 带来更多流量。1.制
- 站长网是个很普通的网站,为什么他会有人气?不是因为网站成功,Admin5团队成功的是人。一.为人低调图王从来没有摆过架子,尽管他很忙,但是我
- 本人是从事网站建设行业,站长朋友们都说专业做网站的来做站长,可以省不少力气,事实证明确实是这样,现在的网站建设行业粥少僧多,行业朋友们都活的
- 前言其实,在服务器的安全设置方面,我虽然有一些经验,但是还谈不上有研究,所以我写这篇文章的时候心里很不踏实,总害怕说错了会误了别人的事。本文
- 很多朋友问,seo要选取什么关键字才能达到效果,以下发表一下我的看法。一、不要太相信top.baidu.com那些关键字是热门,但也是个个人
- 什么是PPC广告?Pay-per-click (PPC)是通过互联网登广告的最好的办法之一,它也是让你的网站产生销售最快的办法之一。当你通过
- 有些 Linux 发行版会提供 GUI 程序来进行系统的监控,例如 SUSE Linux 就有一个非常棒而且专业的工具 YaST,KDE 的
- 一、首先把php的压缩包(这里以PHP4.3.2为例)解压到C:\php-4.3.2-Win32目录中,然后从其中找到一个叫php.ini-
- 站长时下应该是互联网行业最火的词,不管是什么网站管理者都喜欢自称为站长。在互联网这个圈子混久了渐渐发现,站长这个圈子已经自然而然的分成两大阵
- 通过 Google 广告管理系统,我们还可以实现时间和日期上的精准投放。通过和AdSense广告补余相结合,我们可以在指定的日期或
- 我们期待您能通过提供优质的内容和服务来服务于用户和整个互联网。与此同时,您或许经常听到来自互联网界的关于链接问题的讨论,人们各持己见,争论不
- centos7进行ip和端口限制1、限制指定IP访问本机编辑hosts.allow和hosts.deny两个文件,保存即生效。1.1、编辑e
- 国内知名的通用建站软件开发商phpwind今天再次推送新产品应用淘链接,据官方介绍,通过淘链接这一APP应用,把淘宝商品链接转换为佣金结算的
- 很大意义上的传统社区指的论坛,论坛是伴着一些老网虫们共同成长起来的,泡论坛成了网虫们的爱好之一,从个人主页的时代到现在SNS满天飞的世界,论
- 大家好,我是杜晓帅~,做为一个后端开发,因为要学的技术比较多,而各种技术又必须要安装各种包或者配置环境,所以为了保护自己电脑的系统,不让他轻
- 泛搜索时代,我在考虑了很久后才决定用“泛搜索”这样一个词来表达我的想法,这个泛有广泛的意思。泛搜索即搜索已经无处不在,并不仅仅局限于传统的通