shell实现ssh自动登录

Categories: 工具语言
Comments: No Comments
Published on: 2014 年 03 月 07 日

mac下没有找到好用的类似secureCRT,就自己写了个自动登录的脚本,分享一下,如果是新浪的,就基本不用修改代码就直接能用。(其实是想表示虽然那么久没更新,但博主还活着~)
文件名:ssh_auto_login

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/usr/bin/expect
##
#	ssh模拟登陆器
#
#	@author zhiyuan <hzyhouzhiyuan艾特gmail.com>
##
if {$argc<4} {
	puts "Error params: $argv"
	puts "Expect params :user passwd ip port [translate_id]"
	exit 1
}
 
set default_passcode "这里填通道机的默认密码"
 
#trap sigwinch spawned
trap {
 set rows [stty rows]
 set cols [stty columns]
 stty rows $rows columns $cols < $spawn_out(slave,name)
} WINCH
 
set user [lindex $argv 0]
set password [lindex $argv 1]
set ip [lindex $argv 2]
set port [lindex $argv 3]
set timeout 10
 
while 1 {
	spawn ssh -p $port $user@$ip 
	#如果最后的字符匹配则执行命令\r结尾表示确定
	expect {
		"*yes/no" { send "yes\r";exp_continue}
		"*password:" { send "$password\r" }
	}
        #这里是需要通过通道机登陆时的匹配流程,根据需要自行修改。
	expect {
		"*PASSCODE:" { 
			send_user "请输入通道机动态密码:";
			expect_user -re "(.*)\n"
			set random_passcode $expect_out(1,string)
			send "$default_passcode$random_passcode\r"
			expect {
				"Access Denied" { continue }
				"Enter:" { send "1\r" }
			}
			set translate_ip [lindex $argv 4]
			if { $translate_ip != "" } {
				expect "*):" { send "$translate_ip\r" }
			}
		}
		#"Last login:*" { }
	}
	break
}
#无法匹配$,还不知道怎么解决
#expect -re "*\$" { puts "test123"; send "source /etc/profile\r" }
#expect "*\$" { send "cd ~\r" }
send_user "login success!"
interact

上边是ssh的自动登录,可以配合下边的shell使用,很方便。
文件名:xxx_launcher

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/bin/sh
##
#	服务器登陆器
#
#	@author zhiyuan <hzyhouzhiyuan@gmail.com>
##
channel_user="user_namexxx"
channel_passwd="xxxx"
#内网通道机
internal_ip1=xxx.xxx.xxx.xxx
#联通
unicom_ip1=xxx.xxx.xxx.xxx
#电信
telecom_ip1=xxx.xxx.xxx.xxx
case "$1" in
	ci)
		expect ssh_auto_login $channel_user $channel_passwd $internal_ip3 22 
		;;
	cl)
		expect ssh_auto_login $channel_user $channel_passwd $unicom_ip1 22
		;;
	cd)
		expect ssh_auto_login $channel_user $channel_passwd $telecom_ip1 22
		;;
	149)
		expect ssh_auto_login channel_user channel_passwd xxx.xx.xxx.xxx 22 
		;;
	49)
		expect ssh_auto_login $channel_user $channel_passwd $unicom_ip1 22 需要通道机跳转的ipxxx.xxx.xx
		;;
	*)
		echo "帮助信息:"
		echo "\tthere is not a server named [$1]"
		echo "\t服务器149:\t149"
		echo "\t服务器49:\t49"
		;;
esac

此时登陆某个服务器的时候就直接 用上述shell带要登录的服务器参数即可,如: ./xxx_launcher 49

我猜你可能也喜欢:

No Comments - Leave a comment

Leave a comment

电子邮件地址不会被公开。 必填项已用*标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>


Welcome , today is 星期日, 2017 年 11 月 19 日