简易 SSH 自动化
于 2018 年 6 月 15 日
每天编写一个脚本可以让你自由地玩耍和构建其他有用的、更复杂的脚本。每天,我都在努力让我的生活更轻松——我的意思是,尽量停止做重复性的任务。如果一个过程是可重复的;它可以被编写成脚本并自动化。自动化一切的想法并不新鲜,但尝试自动化远程主机上的一个命令。
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 中或手动运行;这些脚本将成为您获得自由的工具箱。