我从事运营工作,需要能够高效地登录数百台服务器中的多台。我说的高效是指:从有人要求我查看一系列主机到我实际进入主机的时间应该最短。现在我必须查看我的笔记,找到主机名,在前面添加我的用户名,将一系列主机放入文本编辑器中,然后将该命令粘贴到终端中,这非常繁琐。
理想情况下,我可以创建一些可以从终端调用的函数,这将帮助我过滤主机列表并找到我需要的主机,添加我的用户名并创建我的 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