通过 SSH 连接到多个主机时提高工作效率

通过 SSH 连接到多个主机时提高工作效率

我从事运营工作,需要能够高效地登录数百台服务器中的多台。我说的高效是指:从有人要求我查看一系列主机到我实际进入主机的时间应该最短。现在我必须查看我的笔记,找到主机名,在前面添加我的用户名,将一系列主机放入文本编辑器中,然后将该命令粘贴到终端中,这非常繁琐。

理想情况下,我可以创建一些可以从终端调用的函数,这将帮助我过滤主机列表并找到我需要的主机,添加我的用户名并创建我的 ssh(或csshx) 命令。我考虑过拥有以下文本文件:

description           hostname          user
.........             .........         ...

并使用cat查找我需要的主机,并将 连接user@到前面并创建命令。我觉得还有更好的方法,我想听听大家对此的看法。

谢谢你的时间!

答案1

尽管可能会变得笨拙,但您可以为您想要的每个描述性名称添加条目到 ~/.ssh/config 中,然后您就可以ssh <name>自动应用正确的用户/主机等。这是我的配置的示例

host abc
   hostname 1.2.3.4
   User root
   LocalForward 5951:192.168.1.1:5901

   ProxyCommand ssh 1.2.3.4 nc 192.168.1.1 22

所以我只需输入ssh abc,它就会以 root 身份登录 1.2.3.4,并设置一些端口转发并将我的 ssh 隧道连接到另一台主机

答案2

我使用别名能够输入一个小命令来访问不同的服务器。因此,我不必输入长命令,只需输入别名即可。现在,当您开始添加越来越多的服务器时,很难记住 server1 的别名为“one”,而 server97 的别名为“fred”,因此第一个别名的想法仅适用于我最常访问的服务器。

对于其他人,我创建一个函数(也是别名),以便当我调用它时,我会看到要连接的服务器列表。根据我输入的数字,它运行别名来连接到该服务器。

我将别名保存在一个.bash_aliases文件中(当然,这取决于操作系统,取决于您定义的位置/方式),并将我的函数保存在一个.bash_functions文件中,然后从.bashrc.这使得维护变得容易,而不是拥有一个巨大的bashrc文件。

因此,例如,您的别名文件中可以包含以下条目:

alias serv1='ssh [email protected]'<br>
alias serv2='ssh [email protected]'<br>
alias start='serverconnect'

然后有一个像这样的函数:

function serverconnect
{
    echo "Select server you would like to connect to:"
    echo " 1 - Server1"
    echo " 2 - Server2"

    read choice

    case $choice in
    1)
      serv1
    ;;
    2)
      serv2
    ;;

    *)
      echo "Invalid choice"
    esac
}

因此,如果我需要连接到 server1,我只需键入“serv1”,而如果我想要连接到服务器列表,我会键入“start”。随着服务器列表的增长,如果您想将它们全部显示在一个列表中(这可能会滚动到屏幕之外)或进一步分解它们,这可能会成为一个挑战。这实际上完全取决于什么适合您的流程。

更新:我认为您可能还需要我调用别名和函数文件的方式。在.bashrc我使用以下语法:

if [ -f "${HOME}/.bash_aliases" ]; then
  source "${HOME}/.bash_aliases"
fi

相关内容