我的博客已迁移到xdoujiang.com请去那边和我交流
一、使用expect自动登录
cat expect.sh
#!/usr/bin/expect
#使用第一个参数 
set local_ip [lindex $argv 0]
#后面的也可以用参数[lindex $argv n]
#set password [lindex $argv 1 ]  
#set password2 [lindex $argv 2]
#set command  [lindex $argv 3]
set local_port 22
set local_user jackchem
set local_11psss 11111111
set local_22psss 22222222
set timeout 30

spawn ssh -q [email protected].$local_ip
expect {
"192.168.20.* password"
{
       send "$local_11psss\n";
}
"192.168.21.* password"
{
       send "$local_22psss\n";
}
"yes/no"
{
       send "yes\n";
       exp_continue;
}
}
interact
先chmod +x expect.sh
比如登录到192.168.20.99的话./auto.sh 20.99
比如登录到192.168.21.88的话./auto.sh 21.88

二、使用sshpass自动登录
cat sshpass.sh
#!/bin/bash
#--------------------------------------------------  
#Created:2015-05-18
#Author:jimmygong
#Mail:[email protected]
#Function:
#Version:1.0
#--------------------------------------------------
case $1 in
192.168.22[0-9].*)
sshpass -f /root/.11pass ssh -q -p22 -l tomhong $1;;
192.168.23[0-9].*)
sshpass -f /root/.22pass ssh -q -p22 -l tomhong $1;;
10.*.*.*)
sshpass -f /root/.33pass ssh -q -p22 -l tomhong $1;;
esac
先chmod +x sshpass.sh
比如登录到192.168.230.199的话./sshpass.sh 192.168.230.199
比如登录到10.1.1.55的话./sshpass.sh 10.1.1.55

三、批量执行多台机器同一个操作(非交互模式)sshpass
基础环境说明
1、ip
serverA=192.168.1.8
serverB=192.168.1.7
serverC=192.168.1.10

2、ssh的-t和-o "StrictHostKeyChecking=no"参数
-o option Can be used to give options in the format used in the configuration file.
This is useful for specifying options for which there is no separate command-line flag.
For full details of the options listed below,and their possible values,see ssh_config(5).
  
-t Force pseudo-tty allocation.This can be used to execute arbitrary screen-based programs on a remote machine,
which can be very useful,e.g.when implementing menu services.Multiple -t options force tty allocation,even if ssh has no local tty.
供一个远程服务器的虚拟tty终端

3、sshpass的-f参数
-f filename The password is the first line of the file filename.
支持从文件里读取密码

cat sshpass.sh
#!/bin/bash
#--------------------------------------------------
#Author:jimmygong
#Email:[email protected]
#FileName:sshpass.sh
#Function: 
#Version:1.0 
#Created:2015-12-16
#--------------------------------------------------
port=22
user="jimmy"
cmd="/bin/ps -ef|grep mysql"
#cmd="/bin/df -Th"
allip=(
192.168.1.8
192.168.1.7
192.168.1.10
)
for ip in ${allip[@]}
do 
    echo $ip
    sshpass -f /root/.11pass ssh -o "StrictHostKeyChecking=no" -t -p$port $user@$ip $cmd
done

执行结果
bash sshpass.sh
192.168.1.8
root       1992      1  0 09:57 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe
mysql      2331   1992  0 09:57 ?        00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
root       2332   1992  0 09:57 ?        00:00:00 logger -t mysqld -p daemon.error
jimmy      2665   2664  0 10:09 pts/1    00:00:00 bash -c /bin/ps -ef|grep mysql
jimmy      2667   2665  0 10:09 pts/1    00:00:00 grep mysql
Connection to 192.168.1.8 closed.
192.168.1.7
root       1983      1  0 09:57 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe
mysql      2310   1983  0 09:57 ?        00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
root       2311   1983  0 09:57 ?        00:00:00 logger -t mysqld -p daemon.error
jimmy      2636   2635  0 10:09 pts/1    00:00:00 bash -c /bin/ps -ef|grep mysql
jimmy      2638   2636  0 10:09 pts/1    00:00:00 grep mysql
Connection to 192.168.1.7 closed.
192.168.1.10
root       2160      1  0 09:57 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe
mysql      2505   2160  0 09:57 ?        00:00:04 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
root       2506   2160  0 09:57 ?        00:00:00 logger -t mysqld -p daemon.error
jimmy      2842   2841  0 10:09 pts/1    00:00:00 bash -c /bin/ps -ef|grep mysql
jimmy      2844   2842  0 10:09 pts/1    00:00:00 grep mysql
Connection to 192.168.1.10 closed.