您的位置:首页 > 运维架构 > Linux

Linux下通过EXPECT脚本自动执行ssh远程连接

2009-07-27 05:59 711 查看
由于经常需要从家里连到实验室的机器,但是中间需要一个中转,于是就需要连续两次进行ssh操作以及输入密码。加上家里网络不稳,经常会断,就又得重新登录。输入那么一长串的东西特别麻烦。于是觉得应该写一个脚本来自动登录,这样就可以带来极大的方便。

原文链接: Linux下通过EXPECT脚本自动执行ssh远程连接

1 expect程序

用的Ubuntu,本身没带expect,安装。

sudo apt-get install expect

(关于expect,参见http://www.tclchina.com/article/translation/expect_tutorial/expect_1_cn.htm

要从源码安装,参见安装 Tcl 和 Expect

2 写脚本 sample.script

下面是简单的一个例子,把登录名和密码都显式地写在脚本里。

#!/usr/bin/expect -f
#auto ssh login

set timeout 20
spawn ssh login_name@host_name
expect “*password:”
send “123456/r”
interact


上面的脚本中,spawn命令激活一个Unix程序来进行交互式的运行。send命令向进程发送字符串。expect命令等待进程的某些字符串。expect支持正规表达式并能同时等待多个字符串,并对每一个字符串执行不同的操作。expect还能理解一些特殊情况,如超时和遇到文件尾。

如果希望脚本有一定的通用性,比如通过参数方式来输入用户名和主机地址。那么脚本可以象这样:

#!/usr/bin/expect -f
#auto ssh login

set timeout 20

set login_name [lindex $argv 0]
set host_name [lindex $argv 1]

spawn ssh $login_name@$host_name

expect “*password:”

send “123456/r”

interact


这样执行的时候$argv 0 就是输入的第一个参数, $argv 1 就是输入的第二个参数

3 给脚本加上可执行权限

chmod +x sample.script

如果文件默认有其它权限,建议最好设置为只能自己读取,修改和执行

chmod 700 sample.script

接着就可以通过执行脚本进行远程登录了 ./sample.script

有不解的地方可以参考以下资料

-----------------------------------------------------------------------------------------------

参考资料:

1

expect中文教程

http://www.tclchina.com/article/translation/expect_tutorial/expect_1_cn.htm

http://www.tclchina.com/article/translation/expect_tutorial/expect_2_cn.htm

2

linux下ssh自动登录的脚本

3

嗯,给个完整的 expect 脚本的例子

++++++++++++++++++++++++++++++++++++++++++++++

相关文章:

Linux 脚本编写基础

Linux下通过EXPECT脚本自动执行ssh远程连接

安装 Tcl 和 Expect

Vista系统中的拒绝访问(Access Denied to Documents and Settings )
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: