在大多数情况下,Linux 系统管理员使用 SSH 登录到程 Linux 服务器时,要么是通过密码,要么是无密码 SSH 登录,或基于密钥的 SSH 身份验证。
如果你想自动在 SSH 登录提示符中提供密码和用户名怎么办?这时 sshpass 就可以帮到你了。
sshpass 的定义:ssh 登陆不能在命令行中指定密码,sshpass 的出现则解决了这一问题。它允许你用 -p 参数指定明文密码,然后直接登录远程服务器,它支持密码从命令行、文件、环境变量中读取。
安装sshpass:
一、启用 EPEL 仓库并使用 yum 命令安装它。
yum install sshpass -y
二、源码安装 sshpass:
$ wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz
$ tar -xvf sshpass.tar.gz
$ cd sshpass-1.06
$ ./configure
# sudo make install
三、rpm包安装sshpass:
可以去官网获取rpm安装包,安装命令 rpm -ivh sshpass(包名)
查看sshpass包是否安装成功:rpm -qa | grep sshpass
#rpm包也可以联系作者获取。
使用sshpass:
1、直接远程连接某主机
sshpass -p {密码} ssh {用户名}@{主机IP}
sshpass -p {密码} ssh -p ${端口} {用户名}@{主机IP}
sshpass -f ${密码文本文件} ssh {用户名}@{主机IP}
sshpass -p {密码} scp {用户名}@{主机IP}:${远程主机目录} ${本地主机目录}
sshpass -p {密码} scp ${本地主机目录} {用户名}@{主机IP}:${远程主机目录}
sshpass -p {密码} ssh -o StrictHostKeyChecking=no {用户名}@{主机IP} 'rm -rf /tmp/test'
-o StrictHostKeyChecking=no :忽略密码提示
例for i in `cat /home/jiaoben/$1`;do sshpass -p密码 ssh -o StrictHostKeyChecking=no $2@$i $3;done
$1是批量主机ip $2是用户名称 $3是需要批量执行的命令,长命令用””括起来。
expect
expect << EOF
spawn bash ./xxx.sh
expect "*" { send "q" }
expect "*yN*" { send "y\r" }
expect "*Yn*" { send "y\r" }
expect eof
EOF
expect <<-EOF
set timeout 100
spawn bash ./xxx.sh
expect "*" { send "q" }
expect "*yN*" { send "y\r" }
expect "*Yn*" { send "y\r" }
expect eof
EOF #注意这里需要tab
expect <<-EOF
spawn ssh-copy-id $user@host
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "${passwd}\n" }
}
expect eof
EOF