這是大體的樣子~shell
這裏有一個問題,就是在使用ssh的時候會有一個等待用戶輸入密碼的過程。不能直接一條命令連接ssh。咱們能夠經過 expect 來解決。bash
不懂的能夠百度一下,很簡單的。O(∩_∩)O哈哈~ssh
首先解決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 "複製代碼
這裏接受三個參數:ui
1. 第一個是ssh連接的用戶名和Ip,例如:hjx@127.0.0.1spa
2. 第二個是ssh用戶的密碼。命令行
3. 第三個是要執行的遠程命令,多個命令用 \n 隔開。code
這樣第一個問題就解決了。cdn
咱們新建一個文件用來保存不少的ssh配置信息。新建文件 ssh.confblog
這裏是分類:
這裏寫名稱;這裏寫ip地址;這裏寫用戶名;這裏寫密碼
給你看一個例子:
sit-×××-service;127.0.0.1;user;ZheShiYiGeMiMa
複製代碼
注意配置項配置要用英文的「';」隔開,不能有空格~~~
這時,咱們須要使用 awk 來處理這個配置文件,並格式上給他對齊,添加序號,而後打印出來。
awk 也很簡單的。O(∩_∩)O哈哈~。能夠這樣寫:
awk -F ';' '{print NR "\t" $1 "\t" $2 }' $conf_file複製代碼
$conf_file 是配置文件的路徑。
這樣,就能夠將文件以比較好看的形式打印出來了,而且每一行會有一個行號。
這裏須要獲取用戶寫入的行號,這樣寫:
echo '請輸入你要鏈接的ip編號,回車結束。'
read host_index
複製代碼
這時,用戶輸入的參數會以變量 host_index 的形式存在。接下里就是提取文件中用戶輸入行數的數據了,這樣寫:
choose_conf=`awk -F ';' 'NR=='"$host_index"' { print $0 }' $conf_file`
複製代碼
$conf_file 依舊是配置文件的路徑。啦啦啦~~~
假如咱們獲取到的信息是這樣的話: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 是你獲取的某一行的信息。
而後就能夠執行最開始咱們寫的那個腳本 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就能夠方便的使用了呢~