shell 脚本实战笔记(8)--ssh免密码输入执行命令
2014-07-09 17:53
666 查看
前言:
ssh命令, 没有指定密码的参数. 以至于在脚本中使用ssh命令的时候, 必须手动输入密码, 才能继续执行. 这样使得脚本的自动化执行变得很差, 尤其当ssh对应的机器数很多的时候, 会令人抓狂.本文讲解了两种方式, 一种借助expect脚本, 一种借助sshpass来实现.
*) 借助expect脚本来实现
1. expect不是系统自带的工具, 需要安装
yum install expect -y
2. expect脚本的编写规则
简单例子:
这样就可以避免输入sudo密码了
3. 案例编写
评注:
ssh -o StrictHostKeyChecking=no 对首次登录的机器不进行检查, 避免了用户手动输入yes/no
echo -e $ssh_warpper, -e参数对后续字符串, 打开转义支持开关.
*) sshpass的使用
官网地址: http://sourceforge.net/projects/sshpass/ 1. 安装sshpass
wget http://nchc.dl.sourceforge.net/project/sshpass/sshpass/1.05/sshpass-1.05.tar.gz tar zxvf sshpass-1.05.tar.gz
cd sshpass-1.05
./configure
make && make install
2. sshpass命令的详解
3. sshpass简单示例
sshpass -p <password> ssh <username>@<server_ip> "<command>"
ssh命令, 没有指定密码的参数. 以至于在脚本中使用ssh命令的时候, 必须手动输入密码, 才能继续执行. 这样使得脚本的自动化执行变得很差, 尤其当ssh对应的机器数很多的时候, 会令人抓狂.本文讲解了两种方式, 一种借助expect脚本, 一种借助sshpass来实现.
*) 借助expect脚本来实现
1. expect不是系统自带的工具, 需要安装
yum install expect -y
2. expect脚本的编写规则
1. [#!/usr/bin/expect] 告知系统脚本里的代码使用那一个shell来执行。 注意:这一行需要在脚本的第一行。 2. [set timeout <timeout>] 基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒. timeout -1 为永不超时 3. [spawn <command>] spawn是进入expect环境后才可以执行的expect内部命令, 主要给后续的命令加个壳, 用来传递交互指令. 4. [expect "<match_string>"] 这里的expect也是expect的一个内部命令,请不要惊讶. 5. [send "<response_string>\r"] 这里就是执行交互动作,与手工输入内容的动作等效。 温馨提示: 命令字符串结尾别忘记加上“\r”,如果出现异常等待的状态可以核查一下. 6. [interact] 执行完成后保持交互状态,把控制权交给控制台, 若要退出,使用expect eof代替 7. $argv 参数数组 expect脚本可以接受从bash传递过来的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个....参数
简单例子:
#! /usr/bin/expect spawn sudo apt-get install vim expect "password" send "<password>\r" expect eof
这样就可以避免输入sudo密码了
3. 案例编写
#! /bin/bash function auto_ssh() { username_server="$1" password="$2" command="$3" ssh_warpper=" spawn ssh -o StrictHostKeyChecking=no $username_server \"$command\"\n expect { \n -nocase \"password:\" {send \"$password\r\"} \n } \n expect eof \n " echo -e $ssh_warpper | /usr/bin/expect } auto_ssh root@172.16.1.121 123456 "ifconfig eth0"
评注:
ssh -o StrictHostKeyChecking=no 对首次登录的机器不进行检查, 避免了用户手动输入yes/no
echo -e $ssh_warpper, -e参数对后续字符串, 打开转义支持开关.
*) sshpass的使用
官网地址: http://sourceforge.net/projects/sshpass/ 1. 安装sshpass
wget http://nchc.dl.sourceforge.net/project/sshpass/sshpass/1.05/sshpass-1.05.tar.gz tar zxvf sshpass-1.05.tar.gz
cd sshpass-1.05
./configure
make && make install
2. sshpass命令的详解
3. sshpass简单示例
sshpass -p <password> ssh <username>@<server_ip> "<command>"
相关文章推荐
- 以一个例子来讲ubuntu12.04下脚本文件内执行sudo 命令自动输入密码
- ssh远程执行命令方法和Shell脚本实例
- 利用shell脚本执行ssh远程另一台主机执行命令并返回命令的结果集
- linux 使用java编写ssh登陆主机 输入密码登陆并执行命令(jsch)
- shell脚本中解决SCP命令需要输入密码的问题
- shell技巧--ssh远程执行包含nohup命令的脚本
- SHELL脚本攻略(学习笔记)--1.3 多命令逻辑执行顺序
- ssh远程到目标机器执行命令shell脚本
- ubuntu下用脚本执行sudo命令免去输入密码
- Shell脚本中滤掉"ssh -t"执行命令时返回的/r字符
- Linux下执行命令时利用脚本自动输入密码
- shell脚本,在循环体中执行ssh命令的问题
- ssh、scp的使用,以及shell脚本解决scp需要输入密码的问题
- python批量操作Linux服务器脚本,ssh密码登录(执行命令、上传、下载)(一)
- ssh远程执行命令方法和Shell脚本实例
- 使用shell脚本ssh远程执行命令,使用awk时总是报错
- Linux下使用SSH非交互式远程执行命令脚本---ssh无密码登陆
- linux 普通用户登录后,执行 shell脚本切自动输入密码切换到root
- shell命令 grep不以某字符开头、ssh远程执行命令返回结果、ssh远程执行多个命令输入文件
- Linux学习笔记:bash特性之多命令执行,shell脚本