简易 SSH 自动化

每天编写一个脚本可以让你自由地玩耍和构建其他有用的、更复杂的脚本。每天,我都在努力让我的生活更轻松——我的意思是,尽量停止做重复性的任务。如果一个过程是可重复的;它可以被编写成脚本并自动化。自动化一切的想法并不新鲜,但尝试自动化远程主机上的一个命令。

SSH 非常灵活,并且附带许多选项。我最喜欢的是它可以通过传递 -t 标志让你在远程服务器上运行命令的能力。 一个例子


ssh -t adam@webserver1.test.com 'cat /etc/hosts'

这将 ssh 到 webserver1.test.com,然后在你的 shell 中运行 cat /etc/hosts 并返回输出。

为了提高效率,您可以创建一个 SSH 密钥对。 创建一个无需密码的公钥和私钥对是一个简单的过程。 要设置此选项,请使用 ssh-keygen,并接受默认设置,确保密码为空


ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/adam/.ssh/id_rsa): y
Enter passphrase (empty for no passphrase): LEAVE BLANK
Enter same passphrase again:
Your identification has been saved in /home/nynet/.ssh/id_rsa.
Your public key has been saved in /home/nynet/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:jUxrQRObADE8ardXMT9UaoAcOcQPBEKGU622646P8ho
 ↪adam@webserver1.test.com
The key's randomart image is:
+---[RSA 2048]----+
|B*++*Bo.=o       |
|.+.              |
|=*=              |
+----[SHA256]-----+

完成后,将公钥复制到目标服务器。 为此,请使用 ssh-copy-id


ssh-copy-id adam@webserver1.test.com
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed:
"/home/adam/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s),
 ↪to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if
 ↪you are prompted now it is to install the new keys
adam@webserver1.test.com's password: ********
Number of key(s) added:        1

系统将要求您输入目标服务器的密码。

如果设置正确,下次您 ssh 到目标服务器时,系统将不会要求您输入密码。

执行原始示例。 现在您无需输入密码,它应该更快。

如果您有少量的服务器并且想要报告正在运行的内核版本,您可以从命令行运行 uname -r,但是要在多个设备上执行此操作,您需要一个脚本。

首先创建一个包含服务器列表的文件,名为 server.txt,然后运行您的脚本来迭代每个服务器并返回所需的信息


#!/bin/bash
if [ -f server.txt ]; then
        for server in $(cat server.txt); do
                ssh -t adam@$server  '
                echo $(uname -r)                '
        done
else
        echo 'No server.txt file'
fi

if 语句正在检查以确保存在一个名为 server.txt 的文件。 for 循环为 server.txt 中的每个目标创建一个名为 server 的变量,然后连接并获取内核信息。

总之,通过稍微修改,您可以拥有一支脚本大军,可以在 cron 中或手动运行;这些脚本将成为您获得自由的工具箱。

Adam McPartlan 是双胞胎的父亲 - Linux 爱好者,开源爱好者 - LFCS,AWS Cloud Practitioner。 在 Twitter 上关注他:@mcparty。

加载 Disqus 评论