大概的樣子 這是大致的樣子~ 寫之前想說的 思路 這裡有一個問題,就是在使用ssh的時候會有一個等待用戶輸入密碼的過程。不能直接一條命令鏈接ssh。我們可以通過 expect 來解決。 不懂的可以百度一下,很簡單的。O(∩_∩)O哈哈~ 開始寫 首先 首先解決ssh等待輸入密碼的問題,首先 我們要安 ...
大概的樣子
這是大致的樣子~
寫之前想說的
- 因為個人工作的的電腦是deepin系統的,系統本身的命令行非常好用,用第三方的ssh工具用不習慣,就想自己寫一個。
- shell腳本是第一次寫,寫的不是很好,見諒。
- 關於字元界面這個東西,上網搜了好久,感覺好麻煩,所以這個界面就只是字元串輸出形成的一個。比較簡陋。
- 目前只支持用戶名,密碼的形式。
思路
- 用一個文件保存多個ssh的配置信息
- 在執行文建的時候將配置文件中的信心展示出來,並加上序號
- 等待用戶輸入序號
- 獲取對應行數,按照一定的格式提取ssh配置信息
- 打開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,例如:[email protected]
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 就好咯
完