Linux

用於儲存 ssh 遠端連接的伺服器列表的 Shell 腳本

  • February 4, 2017

我想將所有伺服器儲存在本地伺服器(Linux Jumpbox)中,因此我可以通過簡單地從我的 Linux jumpbox 遠端搜尋特定主機名和 ssh 來連接。

所以,要求是,輸入伺服器主機名,應該在現有伺服器列表中搜尋,如果找到,執行ssh連接,如果沒有找到,儲存在特定文件夾下並執行ssh連接。

我嘗試了以下簡單的 if 條件,但我實際上想使用文件夾或 LABEL 將儲存伺服器分類為 DEV、QA、UAT、PROD 等。

請分享您的建議/建議管理伺服器列表的最佳方式。還建議 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

您是否考慮過使用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”)選項在本地電腦上執行操作,例如寫入本地文本文件。

引用自:https://serverfault.com/questions/830528