我想将所有服务器存储在本地服务器(Linux Jumpbox)中,这样我就可以通过简单地从我的 Linux 跳转盒搜索特定主机名和 ssh 进行远程连接。
因此,要求是,输入服务器主机名,它应该在现有的服务器列表中搜索,如果找到,则执行 ssh 连接,如果没有找到,则存储在特定文件夹下并执行 ssh 连接。
我尝试了以下简单的 if 条件,但我实际上想将商店服务器归类为 DEV、QA、UAT、PROD 等,使用文件夹或 LABEL。
请分享您管理服务器列表的最佳方法的建议/推荐。同时建议 IF 或 CASE 是否是更好的方法。
***脚本****
#!/bin/bash
if test -f /home/oracle/remote_hosts.lst
then
echo "The File /home/oracle/remote_hosts.lst exists"
else
echo "The File /home/oracle/remote_hosts.lst does not exist"
exit 1
fi
echo "Please enter the Host Name of Remote Host System: \c"
read rhost
if grep $rhost /home/oracle/remote_hosts.lst 1> /dev/null 2>&1
then
ssh -l oracle $rhost
else
echo $rhost >> /home/oracle/remote_hosts.lst
ssh -l oracle $rhost
fi
答案1
您是否考虑过使用ssh 配置文件?
Host web
HostName webserver.server.com
User www
Host db? maindb backupdb
User oracle
Host github.com
IdentityFile ~/.ssh/git.pub
您可以使用它来设置几乎所有命令行标志的默认值,使用通配符等。
我个人将它与简单的 bash 别名结合起来,所以说输入“sw”是“ssh web”的别名,只是为了让我的生活变得更轻松。
只是为了澄清上面的几点。您只需要覆盖所需的值,这样就可以节省时间。例如,如果您唯一需要覆盖的是用户名,您可以将大多数主机放在同一个主机下,用空格分隔。
在我的 ssh 配置文件中,一些定义长达 10 行,配置了端口转发、特殊密钥和 x11,其他定义只有 1 行,并匹配数千个主机。在上面的示例中,“db?”将匹配“db3”。
使用注释(#)您仍然可以构建标签的概念(或者只是将相同的服务器类型合并在一起)。
如果您出于审计原因等想要获取服务器列表,您还可以使用“LocalCommand”(和“PermitLocalCommand”)选项在本地机器上执行操作,例如写入本地文本文件。