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

来源:互联网 发布:安禄山 知乎 编辑:程序博客网 时间:2024/04/28 20:52

由于经常需要从家里连到实验室的机器,但是中间需要一个中转,于是就需要连续两次进行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

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

view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
#!/usr/bin/expect -f  
#auto ssh login   
 
set timeout 20  
spawn ssh login_name@host_name  
expect “*password:”   
send “123456/r”   
interact 
    #!/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还能理解一些特殊情况,如超时和遇到文件尾。

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

view plaincopy to clipboardprint?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
#!/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   
   #!/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

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/orzorz/archive/2009/07/27/4382717.aspx

原创粉丝点击