• 云途科技成立于2010年 - 专注全球跨境电商服务器租赁托管!
  • 帮助中心

    您可以通过下方搜索框快速查找您想知道的问题

    linux expect自动登录ssh,ftp

      in  unix      Tags: 

    expect是一种能够按照脚本内容里面设定的方式与交互式程序进行“会话”的程序。根据脚本内容,Expect可以知道程序会提示或反馈什么内容以及 什么是正确的应答。它是一种可以提供“分支和嵌套结构”来引导程序流程的解释型脚本语言。

    shell功能很强大,但是不能实现有交互功能的多机器之前的操作,例如sshftp.而expect可以帮助我们来实现.

    一,安装expect

    yum install expect

    其实expect根bash形势上差不多的.

    二,实例

    1,ssh实现自动登录,并停在登录服务器上

    #!/usr/bin/expect -f
     set ip [lindex $argv 0 ]     //接收第一个参数,并设置IP
     set password [lindex $argv 1 ]   //接收第二个参数,并设置密码
     set timeout 10                   //设置超时时间
     spawn ssh root@$ip       //发送ssh请滶
     expect {                 //返回信息匹配
     "*yes/no" { send "yes\r"; exp_continue}  //第一次SSH连接会提示yes/no,继续
     "*password:" { send "$password\r" }      //出现密码提示,发送密码
     }
     interact          //交互模式,用户会停留在远程服务器上面.

    运行结果如下:

    root@Ubuntu:/home/zhangy# ./test.exp 192.168.1.130 admin
    spawn SSH root@192.168.1.130
    Last login: Fri Sep  7 10:47:43 2012 from 192.168.1.142
    [root@linux ~]#

    这个例子有统一的接口,根据IP和密码可以连接到不同的机器.如果你嫌输入IP和密码麻烦,看下面的例子

    #!/usr/bin/expect -f
     set ip 192.168.1.130
     set password admin
     set timeout 10
     spawn SSH root@$ip
     expect {
     "*yes/no" { send "yes\r"; exp_continue}
     "*password:" { send "$password\r" }
     }
     interact

    运行结果如下:

    root@Ubuntu:/home/zhangy# ./web.exp
    spawn SSH root@192.168.1.130
    Last login: Fri Sep  7 12:59:02 2012 from 192.168.1.142
    [root@linux ~]#

    2,ssh远程登录到服务器,并且执行命令,执行完后并退出

    #!/usr/bin/expect -f
     set ip 192.168.1.130
     set password admin
     set timeout 10
     spawn ssh root@$ip
     expect {
     "*yes/no" { send "yes\r"; exp_continue}
     "*password:" { send "$password\r" }
     }
     expect "#*"
     send "pwd\r"
     send  "exit\r"
     expect eof

    运行结果如下:

    root@Ubuntu:/home/zhangy# ./test3.exp
    spawn ssh root@192.168.1.130
    root@192.168.1.130's password:
    Last login: Fri Sep  7 14:05:07 2012 from 116.246.27.90
    [root@localhost ~]# pwd
    /root
    [root@localhost ~]# exit
    logout
    Connection to 192.168.1.130 closed.

    3,远程登录到ftp,并且下载文件

    #!/usr/bin/expect -f
     set ip [lindex $argv 0 ]
     set dir [lindex $argv 1 ]
     set file [lindex $argv 2 ]
     set timeout 10
     spawn ftp $ip
     expect "Name*"
     send "zwh\r"
     expect "Password:*"
     send "zwh\r"
     expect "ftp>*"
     send "lcd $dir\r"
     expect {
     "*file"  { send_user "local $_dir No such file or directory";send "quit\r" }
     "*now*"  { send "get $dir/$file $dir/$file\r"}
     }
     expect {
     "*Failed" { send_user "remote $file No such file";send "quit\r" }
     "*OK"     { send_user "$file has been download\r";send "quit\r"}
     }
     expect eof

    运行结果如下:

    root@Ubuntu:/home/zhangy# ./test2.exp 192.168.1.130 /var/www/www aaa.html
    spawn ftp 192.168.1.130
    Connected to 192.168.1.130.
    220 (vsftpd 2.0.5)
    Name (192.168.1.130:root): zwh
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> lcd /var/www/www
    Local directory now /var/www/www
    ftp> get /var/www/www/aaa.html /var/www/www/aaa.html
    local: /var/www/www/aaa.html remote: /var/www/www/aaa.html
    200 PORT command successful. Consider using PASV.
    150 Opening BINARY mode data connection for /var/www/www/aaa.html (66 bytes).
    226 File send OK.
    66 bytes received in 0.00 secs (515.6 kB/s)
    quit aaa.html has been download
    221 Goodbye.


    • 外贸虚拟主机

      1GB硬盘

      2个独立站点

      1000M带宽

      不限制流量

      美国外贸专用虚拟主机,cPanel面板,每天远程备份.
      服务器配置:2*E5 32核,96GB 内存,4*2TB 硬盘 RAID10 阵列.

      ¥180/年

    • 美国/荷兰外贸VPS

      2核CPU

      1G内存

      30硬盘

      10M带宽

      美国/荷兰外贸云服务器,专注外贸服务器行业12年.
      服务器配置:2*E5 32核,96GB 内存,4*2TB 硬盘 RAID10 阵列.

      ¥99/月

    • 全球外贸服务器

      8核CPU

      32G内存

      1TB硬盘

      1000M带宽

      已部署数据中心:美国洛杉矶/亚特兰大、荷兰、加拿大、英国伦敦、德国、拉脱维亚、瑞典、爱沙尼亚
      自有机柜(全球九大数据中心),稳定在线率:99.9%

      ¥999/月 原价1380

    7*24小时 在线提交工单

    如果您的问题没有得到解决,推荐您在线提交工单,我们的客服人员会第一时间为您解决问题

    展开