ssh不用手动输入密码登录终端sshpass 和 case的组合用法
1.sshpass 的用法
在第一次手动输入密码ssh mdc@172.16.34.17 登陆上终端后,可以把下面两条语句做成shell脚本来直接登录终端,省去了每次输入密码的麻烦。
password=123456sshpass -p $password ssh mdc@172.16.34.17
2.case匹配shell脚本后的不同参数的使用
case $1 in 17)# 如果脚本后跟的第一个参数为 17, 则执行这里的语句;;a|-b)# 如果脚本后跟的第一个参数为 a 或者 -b, 则执行这里的语句;;*)# 当shell脚本后没指定参数,则执行这里的默认语句;;esac
下面是 sshpass 和 case的组合用法
#set -x# 判断是否安装了sshpassif ! type sshpass >/dev/null 2>&1; thenecho 'sshpass 未安装'sudo apt install -y sshpassfi# 定义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
。这样就可以直接使用脚本第一次登录,不用再手动输入密码。