#!/bin/expect --
########################################## zhichao.hu
#Push the id.pas.pub public key to the target server through the SSH service to implement secret-free login.
#Define an iplist Create an iplist file in the current directory. The content format is: User Password IPaddress Port
#parameter: 1.user
# 2.password
# 3.ip
# 4.Por
##########################################
if {[file isfile /root/.ssh/id_rsa.pub]} {
puts "/root/.ssh/id_rsa.pub file exists"
set ip_file [open ./iplist r]
while {[gets $ip_file line] >= 0} {
set user [lindex $line 0]
set password [lindex $line 1]
set ip [lindex $line 2]
set port [lindex $line 3]
spawn ping ${ip} -w 2
expect {
-nocase -re "100% packet loss" {
send_error "Ping ${ip} is unreachable, Please check the IP address.\n"
exit 1
}
}
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $user@$ip
expect {
#first connect, no public key in ~/.ssh/known_hosts
"Are you sure you want to continue connecting (yes/no)?" {
send "yes\r"
expect "password:"
send "$password\r"
}
#already has public key in ~/.ssh/known_hosts
"password:" {
send "$password\r"
}
"Now try logging into the machine" {
#it has authorized, do nothing!
}
}
expect eof
puts "User: $user,\tPassword: xxxx,\tIP: $ip,\tPort: $port\n"
}
close $ip_file
exit 0
} elseif {[file isfile /root/.ssh/id_rsa]} {
puts "/root/.ssh/id_rsa file exists\t\nFile not found in /root/.ssh/id_rsa.pub"
exit 2
} else {
puts "Create an rsa key pair..............................."
} spawn ssh-keygen -t rsa
expect {
"*file in which to save the key*" {
send "\n\r"
send_user "/root/.ssh\r"
exp_continue
"*Overwrite (y/n)*"{
send "n\n\r"
}
}
"*Enter passphrase*" {
send "\n\r"
exp_continue
}
"*Enter same passphrase again*" {
send "\n\r"
exp_continue
}
}
set ip_file [open ./iplist r]
while {[gets $ip_file line] >= 0} {
set user [lindex $line 0]
set password [lindex $line 1]
set ip [lindex $line 2]
set port [lindex $line 3]
spawn ping ${ip} -w 2
expect {
-nocase -re "100% packet loss" {
send_error "Ping ${ip} is unreachable, Please check the IP address.\n"
exit 1
}
}
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $user@$ip
expect {
#first connect, no public key in ~/.ssh/known_hosts
"Are you sure you want to continue connecting (yes/no)?" {
send "yes\r"
expect "password:"
send "$password\r"
}
#already has public key in ~/.ssh/known_hosts
"password:" {
send "$password\r"
}
}
puts "User: $user,\tPassword: xxxx,\tIP: $ip,\tPort: $port\n"
}
close $ip_file expect eof

最新文章

  1. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
  2. 激活windows7 企业版小记
  3. 事务日志以及虚拟日志文件(VLFs)概述
  4. Java通过httpclient获取cookie模拟登录
  5. php-fpm的重启/关闭
  6. maven小项目注册服务(一)--email和persist模块
  7. PAT 1013
  8. Understanding Extension Class Loading--官方
  9. Css 描点
  10. socket编程之TCP/UDP
  11. #云栖大会# 移动安全专场——APP加固新方向(演讲速记)
  12. Skyline TerraExplorer -二次开发- 加载外部数据的各种连接串
  13. 【进阶3-3期】深度广度解析 call 和 apply 原理、使用场景及实现(转)
  14. JQuery插件之【jqGrid】常用语法整理
  15. idea快捷键使用
  16. 尚硅谷spring_boot课堂笔记
  17. SQL Server连接错误1326
  18. Redis数据库高级实用特性:持久化机制
  19. EF5+MVC4系列(8) ActionResult的返回值
  20. memcache 基础原理

热门文章

  1. python学习之时间处理
  2. asp.net core 排序过滤分页组件:sieve(1)
  3. centos下安装nginx并部署angular应用
  4. OpenCV4.1.0实践(3) - 图片缩放
  5. js判断手机端
  6. Elasticsearch 目录总结
  7. js中字符串可以调用的方法
  8. Docker 入门篇
  9. 堆以及一些用法 QWQ这是写得最认真的板子题
  10. x86汇编语言实践(3)