国外一家做乳胶衣视频的网站百度平台营销软件
目 录
一、要求
二、解决方案
(一)解决思路
(二)方案
三、脚本程序实现
(一)脚本代码和解释
1、定义hosts.txt文件
2、脚本代码
3、代码解释
(二)脚本验证
1、脚本编辑
2、给予执行权限
3、运行脚本,查看效果
四、扩展
一、要求
一般我们做维护的时候,必然是维护多个服务器,在没有更多的工具的情况下,如何更加方便的登录到不同的linux服务器上进行维护?
二、解决方案
(一)解决思路
可以把要维护的所有服务器的信息输入到一个文件中,若需要删除或者新增服务器,直接修改这个文件就行。然后可以编写脚本,来选择不同的服务器,然后调用ssh命令登录刚刚选择到的服务器。
(二)方案
(1)建立hosts列表文件hosts.txt,包含服务器的名字、IP地址、登录账号等信息;
(2)通过select、awk等命令,获取hosts列表中的服务器地址;
(3)选择要登录的服务器;
(4)调用ssh,配置合适的选项,准备登录选择到的服务器;
(5)输入密码,登录选中的服务器。
三、脚本程序实现
直接把脚本写出来,分享给大家。
(一)脚本代码和解释
1、定义hosts.txt文件
内容格式为:主机名 IP User Port ,具体定义参考如下:
[root@localhost home]# cat host.txt
ecs-52a1 121.37.18.30 121yunwei 26
test2 114.246.242.112 admin 22
[root@localhost home]#
2、脚本代码
如下为编写的bash代码:
#!/bin/bash
PS3="Please input number: "
HOST_FILE=hosts.txt
while true; do
select NAME in $(awk '{print $1}' $HOST_FILE) quit; do
[ ${NAME:=empty} == "quit" ] && exit 0
IP=$(awk -v NAME=${NAME} '$1==NAME{print $2}' $HOST_FILE)
USER=$(awk -v NAME=${NAME} '$1==NAME{print $3}' $HOST_FILE)
PORT=$(awk -v NAME=${NAME} '$1==NAME{print $4}' $HOST_FILE)
if [ $IP ]; then
echo "Name: $NAME, IP: $IP"
ssh -o StrictHostKeyChecking=no -p $PORT -i id_rsa $USER@$IP # 密码免交互登录
break
else
echo "Input error, Please enter again!"
break
fi
done
done
3、代码解释
脚本的功能是允许用户从一个预定义的主机列表中选择一个主机,并使用 SSH 密码进行免交互登录。如下逐步解释这段脚本的每一部分。
(1)PS3="Please input number: "
这是为 select 命令设置的提示信息。PS3 是 select 命令中用于提示用户输入的变量。
(2)HOST_FILE=hosts.txt
定义一个变量 HOST_FILE,其值为 host.txt。这个变量将用于后面的脚本中,指向包含主机信息的文件。
(3)while true; do ... done
这是一个无限循环,脚本会一直在这个循环中运行,直到遇到 exit 命令才会退出。
(4)select NAME in $(awk '{print $1}' $HOST_FILE) quit; do ... done
这是一个 select 循环,它会显示 HOST_FILE 文件中每行的第一个字段(使用 awk 命令提取),并让用户选择一个。用户可以选择的选项还包括一个 quit 选项。
(5)[ ${NAME:=empty} == "quit" ] && exit 0
如果用户选择了 quit 选项,脚本将退出,并返回状态码 0。
(6)IP=$(awk -v NAME=${NAME} '$1==NAME{print $2}' $HOST_FILE)
使用 awk 命令从 HOST_FILE 文件中查找用户选择的主机名,并提取其 IP 地址。
(7)USER=$(awk -v NAME=${NAME} '$1==NAME{print $3}' $HOST_FILE)
使用 awk 命令从 HOST_FILE 文件中查找用户选择的主机名,并提取其用户名。
(8)PORT=$(awk -v NAME=${NAME} '$1==NAME{print $4}' $HOST_FILE)
使用 awk 命令从 HOST_FILE 文件中查找用户选择的主机名,并提取其端口号。
(9)if [ $IP ]; then ... else ... fi
这是一个条件语句,检查变量 IP 是否为空。如果不为空,执行 SSH 登录操作;如果为空,显示错误信息并跳出 select 循环。
(10)echo "Name: $NAME, IP: $IP"
显示用户选择的主机名和 IP 地址。
(11)ssh -o StrictHostKeyChecking=no -p $PORT -i id_rsa $USER@$IP
使用 SSH 命令登录到用户选择的主机。这里禁用了 StrictHostKeyChecking 选项,这意味着在首次连接到主机时不会询问用户确认主机的密钥。-p 选项用于指定端口号,-i 选项用于指定私钥文件(这里假设为 id_rsa)。
(12)break
在成功登录后,使用 break 命令跳出 select 循环和 while 循环。
(二)脚本验证
1、脚本编辑
使用编辑器,比如vi,把代码输入进去;
保存这个脚本到一个文件中,比select_host.sh
2、给予执行权限
chmod +x w select_host.sh
3、运行脚本,查看效果
可以运行这个脚本来检查进程的运行情况,如下:
[root@localhost home]#
[root@localhost home]#
[root@localhost home]# whoami
root
[root@localhost home]#
[root@localhost home]# sh select_host.sh
1) ecs-52a1
2) test2
3) quit
Please input number: 2
Name: test2, IP: 114.246.242.222
Warning: Identity file id_rsa not accessible: No such file or directory.
admin@114.246.242.112's password:
Permission denied, please try again.
admin@114.246.242.112's password:
Permission denied, please try again.
admin@114.246.242.112's password:
Last failed login: Sat Mar 2 23:30:56 CST 2024 from 222.93.149.89 on ssh:notty
There were 2 failed login attempts since the last successful login.
Last login: Sat Mar 2 23:30:16 2024 from 222.93.149.89
[admin@ecs01 ~]$
[admin@ecs01 ~]$
[admin@ecs01 ~]$ whoami
admin
[admin@ecs01 ~]$
[admin@ecs01 ~]$
[admin@ecs01 ~]$ 等待输入超时:自动登出
Connection to 114.246.242.112 closed.
1) ecs-52a1
2) test2
3) quit
Please input number: 3
[root@localhost home]#
四、扩展
在实际使用中, 服务器数量可能很多,您可以直接在hosts.txt中按照规定的格式任意添加,同时,您还可以自己设定主机的名称,方便记忆。