寫一個有字元介面的ssh連結工具

何白白發表於2019-02-15

大概的樣子

這是大致的樣子~

寫之前想說的

  1. 因為個人工作的的電腦是deepin系統的,系統本身的命令列非常好用,用第三方的ssh工具用不習慣,就想自己寫一個。
  2. shell指令碼是第一次寫,寫的不是很好,見諒。
  3. 關於字元介面這個東西,上網搜了好久,感覺好麻煩,所以這個介面就只是字串輸出形成的一個。比較簡陋。
  4. 目前只支援使用者名稱,密碼的形式。

思路

  1. 用一個檔案儲存多個ssh的配置資訊
  2. 在執行文建的時候將配置檔案中的信心展示出來,並加上序號
  3. 等待使用者輸入序號
  4. 獲取對應行數,按照一定的格式提取ssh配置資訊
  5. 開啟ssh

  這裡有一個問題,就是在使用ssh的時候會有一個等待使用者輸入密碼的過程。不能直接一條命令連結ssh。我們可以通過 expect 來解決。

  不懂的可以百度一下,很簡單的。O(∩_∩)O哈哈~

開始寫

首先

  首先解決ssh等待輸入密碼的問題,首先 我們要安裝 expect 。然後新建一個檔案 ssh.sh。

#!/bin/bash
#ssh_ip_user=hjx@127.0.0.1
ssh_ip_user=${1}
password=${2}
command=${3}
echo '正連結遠端地址:'${ssh_ip_user}
expect -c "
set timeout 30
spawn ssh -p22 ${ssh_ip_user} ${command}
expect {
    \"yes/no\" { send \"yes\r\"; exp_continue }
    \"password\" { send \"${password}\r\" }
}
interact
"複製程式碼

  這裡接受三個引數:

  1. 第一個是ssh連結的使用者名稱和Ip,例如:hjx@127.0.0.1

  2. 第二個是ssh使用者的密碼。

  3. 第三個是要執行的遠端命令,多個命令用 \n 隔開。

  這樣第一個問題就解決了。

然後

  我們新建一個檔案用來儲存很多的ssh配置資訊。新建檔案 ssh.conf

這裡是分類:
這裡寫名稱;這裡寫ip地址;這裡寫使用者名稱;這裡寫密碼
給你看一個例子:
sit-×××-service;127.0.0.1;user;ZheShiYiGeMiMa
複製程式碼

  注意配置項配置要用英文的“';”隔開,不能有空格~~~

然後again

這時,我們需要使用 awk 來處理這個配置檔案,並格式上給他對齊,新增序號,然後列印出來。

awk 也很簡單的。O(∩_∩)O哈哈~。可以這樣寫:

awk -F ';' '{print NR "\t" $1 "\t" $2 }' $conf_file複製程式碼

$conf_file 是配置檔案的路徑。

這樣,就可以將檔案以比較好看的形式列印出來了,並且每一行會有一個行號。

然後again and again

這裡需要獲取使用者寫入的行號,這樣寫:

echo '請輸入你要連線的ip編號,回車結束。'
read host_index
複製程式碼

這時,使用者輸入的引數會以變數 host_index 的形式存在。接下里就是提取檔案中使用者輸入行數的資料了,這樣寫:

choose_conf=`awk -F ';'  'NR=='"$host_index"' { print $0 }' $conf_file`
複製程式碼

$conf_file 依舊是配置檔案的路徑。啦啦啦~~~  

然後again and again and again

假如我們獲取到的資訊是這樣的話:hejiaxuan;127.0.0.1;hjx;123123

我們需要提取裡面的:使用者名稱,ip,密碼。可以這樣寫:

ssh_ip=`echo $choose_conf | cut -d";" -f2`
user_name=`echo $choose_conf | cut -d";" -f3`
user_pwd=`echo $choose_conf | cut -d";" -f4`
複製程式碼

這裡 $choose_conf 是你獲取的某一行的資訊。

然後again and again and again and~~~~

然後就可以執行最開始我們寫的那個指令碼 ssh.conf 愉快的連結ssh了

執行命令是這樣的:

sh ssh.sh $user_name@$ssh_ip $user_pwd
複製程式碼

最後  

貼出來完整的程式碼吧~~~

檔名 sshp.sh

#!/bin/bash
# 用於簡化ssh連結的工具.通過選擇配置中的編號來連結ssh
my_ssh='/home/hjx/sh/bin/ssh.sh'
conf_file='/home/hjx/sh/conf/ssh.conf'
clear
#列印配置中的sshpwd
awk -F ';' '{print NR "\t" $1 "\t" $2 }' $conf_file
echo '請輸入你要連線的ip編號,回車結束。'
read host_index
max_line=`awk 'END {print NR }' $conf_file`
if test $host_index -gt $max_line
then
    echo "選擇錯誤: 超過範圍"
    return
fi
if test $host_index -lt 1
then
    echo "選擇錯誤: 超過範圍"
    return
fi
# 擷取配置資訊
choose_conf=`awk -F ';'  'NR=='"$host_index"' { print $0 }' $conf_file`
ssh_mark=`echo $choose_conf | cut -d";" -f1`
ssh_ip=`echo $choose_conf | cut -d";" -f2`
user_name=`echo $choose_conf | cut -d";" -f3`
user_pwd=`echo $choose_conf | cut -d";" -f4`
if test $ssh_mark = $ssh_ip;
then
    echo "選擇錯誤:配置選擇錯誤"
    return
fi  
#ssh_user_ip_pwd 示例 hjx@127.0.0.1 pwd
sh $my_ssh $user_name@$ssh_ip $user_pwd複製程式碼

執行 sh sshp.sh 就好咯~~

如果想方便使用的話,還可以設定一個

alias sshp='sh /home/hjx/sh/sshp.sh'複製程式碼

這樣只需要敲一個sshp就可以方便的使用了呢~


相關文章