【Linux】30.ssh不用手动输入密码登录终端sshpass 和 shell脚本后跟参数自动匹配case的用法
生活随笔
收集整理的這篇文章主要介紹了
【Linux】30.ssh不用手动输入密码登录终端sshpass 和 shell脚本后跟参数自动匹配case的用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ssh不用手動輸入密碼登錄終端sshpass 和 case的組合用法
1.sshpass 的用法
在第一次手動輸入密碼ssh mdc@172.16.34.17 登陸上終端后,可以把下面兩條語句做成shell腳本來直接登錄終端,省去了每次輸入密碼的麻煩。
password=123456 sshpass -p $password ssh mdc@172.16.34.172.case匹配shell腳本后的不同參數的使用
case $1 in 17)# 如果腳本后跟的第一個參數為 17, 則執行這里的語句 ;; a|-b)# 如果腳本后跟的第一個參數為 a 或者 -b, 則執行這里的語句 ;;*)# 當shell腳本后沒指定參數,則執行這里的默認語句 ;; esac下面是 sshpass 和 case的組合用法
#set -x# 判斷是否安裝了sshpass if ! type sshpass >/dev/null 2>&1; thenecho 'sshpass 未安裝'sudo apt install -y sshpass fi# 定義info函數 function info() {(>&2 echo -e "[\e[34m\e[1mINFO\e[0m] $*") }password=aaa123456case $1 in 17)echo ""info "login mdc@172.16.34.17 "sshpass -p $password ssh mdc@172.16.34.17 -o "StrictHostKeyChecking no"a)echo ""info "login mdc@172.16.33.200"echo ""sshpass -p $password ssh mdc@172.16.33.200 -o "StrictHostKeyChecking no" ;;push|-p)echo ""info "push release to mdc@192.168.1.6:/home/mdc/personal/zhz/"echo ""sshpass -p $password scp -rP 22 /home/cidi/squirrel/squirrel_docker/examples/env_fusion/squirrel_framework/release mdc@192.168.1.6:/home/mdc/personal/zhz/ ;;*)echo ""info "login mdc@192.168.1.6 -p 22"echo ""sshpass -p $password ssh mdc@192.168.1.6 -p 22 -o "StrictHostKeyChecking no" ;; esac下面來分析上面腳本中的-o "StrictHostKeyChecking no"的作用。
有時候會需要登錄不同設備主機,但是這些設備主機的ip都是一樣的,如IP都為192.168.200.199,使用ssh登錄另一臺設備主機就會出現下圖的情況:
需要按照圖中提示,在終端復制粘貼輸入這一行:
ssh-keygen -f "/home/hostname/.ssh/known_hosts" -R 192.168.200.199
這一步執行過后,使用sshpass的shell腳本登錄主機時,并不會成功,因為他會詢問(yes/no)
如果不想每次第一次訪問該設備主機時都要手動輸入yes,并輸入主機密碼,可以在腳本的ssh命令最后后面加上-o "StrictHostKeyChecking no"。
也可以使用這個方法:在ubuntu系統中/etc/ssh/ssh_config文件中有一行
# StrictHostKeyChecking ask
把這一行取消注釋,然后把ask修改為no。這樣就可以直接使用腳本第一次登錄,不用再手動輸入密碼。
總結
以上是生活随笔為你收集整理的【Linux】30.ssh不用手动输入密码登录终端sshpass 和 shell脚本后跟参数自动匹配case的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux】29.扫描本机同一局域网内
- 下一篇: 【c++】13.必须用指针取值的情况.m