穆琪的博客

一个程序员的自传

shell脚本模拟ssh登录

1、背景

使用mac的终端直接ssh,但是每次都要输入密码,不堪其扰,我就想到了用shell脚本写出一个替我自动输入密码的一个脚本。这个脚本应该也适用于Linux。

2、源码

ssh_login.expect

#!/usr/bin/expect

set ssh_name [lindex $argv 0]
set timeout 1    # 设置超时等待时间,减少登入后卡10s
if {$ssh_name == ""} {
    puts "输入的服务器名字不能为空!"
    exit
}
set fid [open "$env(HOME)/.ssh_info.txt" r]
set flag 0 
while {[gets $fid line] >= 0} {
    set name [lindex $line 0]
    set ip [lindex $line 1]
    set port [lindex $line 2]
    set user [lindex $line 3]
    set passwd [lindex $line 4]
    if {$name == $ssh_name} {
        set flag 1
        break
    }
}
close $fid

if {$flag == 0} {
    puts "没有找到该服务器名字!"
    exit
} else {
    puts "即将连接>>>>>>>>>>>"
}

spawn ssh -p $port $user@$ip
expect {
    "yes/no" { send "yes\n"; exp_continue }
    "assword:" { send "$passwd\n" }
}
expect {
    "assword:" {
        puts "密码错误,请检查配置文件!"
        exit
    }
}
expect $user
interact

3、使用方法

需要在自己的用户目录下面创建一个文件名为  .ssh_info.txt

内容为以下的格式:

name  ip  port  user  password
test 192.168.1.1 22 root root1234

解释:第一行为列名,写不写都可以,第一个字段是服务器的名字,需要保证不能重复,第二个是服务器ip,第三个是ssh端口,第四个是用户名,第五个是ssh密码。

然后执行:

./ssh_login.expect   <name>


© 鲁ICP备18041558号
Powered by Z-BlogPHP & Yiwuku.com