Shell脚本实现自动输入密码登录服务器脚本实现自动输入密码登录服务器
主要介绍了Shell脚本实现自动输入密码登录服务器,本文使用expect来实现这个需求,讲解了expect的安装及使用
脚本,需要的朋友可以参考下
使用Linux的程序员对输入密码这个举动一定不陌生,在Linux下对用户有严格的权限限制,干很多事情越过了权限就得输入密
码,比如使用超级用户执行命令,又比如ftp、ssh连接远程主机等等,如下图:
那么问题来了,在脚本自动化执行的时候需要输入密码怎么办?比如你的脚本里有一条scp语句,总不能在脚本执行到这一句
时手动输入密码吧。
针对于ssh或scp命令,可能有人会回答是建立信任关系,关于建立ssh信任关系的方法请自行百度Google,只需要两行简单的
命令即可搞定,但这并不是常规的解决方案,如果是ftp连接就没辙了,况且,你不可能为了执行某些命令去给每个你要连接
的主机都手动建立ssh信任,这已经偏离了今天主题的本意,今天要说的是在脚本里自动输入密码,我们可以想象下,更优雅
的方式应该是在脚本里自己配置密码,当屏幕交互需要输入时自动输入进去,要达到这样的效果就需要用到expect。
安装安装
CentOS下安装命令很简单,如下
复制代码 代码如下:
sudo yum install expect
至于Mac用户,可以通过homebrew安装(需要先安装homebrew,请自行Google)
复制代码 代码如下:
brew install expect
测试脚本测试脚本
我们写一个简单的脚本实现scp拷贝文件,在脚本里配置密码,保存为scp.exp如下
复制代码 代码如下:
#!/usr/bin/expect
set timeout 20
if { [llength $argv] < 2} {
puts "Usage:"
puts "$argv0 local_file remote_path"
exit 1
}
set local_file [lindex $argv 0]
set remote_path [lindex $argv 1]
set passwd your_passwd
set passwderror 0
spawn scp $local_file $remote_path
expect {
"*assword:*" {
if { $passwderror == 1 } {
puts "passwd is error"
exit 2
}
set timeout 1000
set passwderror 1
send "$passwd"
exp_continue
}
"*es/no)?*" {
评论0