用于存储 ssh 远程连接的服务器列表的 Shell 脚本

用于存储 ssh 远程连接的服务器列表的 Shell 脚本

我想将所有服务器存储在本地服务器(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”)选项在本地机器上执行操作,例如写入本地文本文件。

相关内容