# 内容摘要

  • except 简介
  • 利用 except,向服务器传输文件 & ssh 登录服务器

# 1. except 简介

  • except 的安装

    Mac:

    1
    brew install expect

    Linux:

    1
    apt install expect

    压缩包安装

    参考博客: https://www.jianshu.com/p/942b801757de

  • 简介

    shell 脚本功能非常强大,可以帮助我们自动完成很多繁琐的工作。但是对于登录服务器这种需要自动交互的过程,shell 就有些力不从心,except 可以完美解决这一需求。

    参考博客: Linux expect 用法 https://www.cnblogs.com/0xcafedaddy/p/7147051.html

    expect 脚本使用 http://einverne.github.io/post/2019/01/expect-command.html# 关键命令

    expect - 自动交互脚本 http://xstarcd.github.io/wiki/shell/expect.html

    • 四个重要的命令

      命令 说明
      spawn 启动新的进程,输出可以被 expect 所捕获
      expect 从进程接收字符串,期望获得字符串
      send 向进程发送字符串,模拟用户输入,注意添加 \r 回车
      interact 允许用户与进程交互
    • 简单示例 demo.sh

      1
      2
      3
      4
      5
      6
      7
      #!/usr/bin/except

      set timeout 10; # 设置程序超时时间
      spawn ssh root@10.10.10.11 # ssh连接服务器
      expect "password" # 判断进程输出中是否有"password"
      send "your_password\r" # 将密码输入 \r是回车
      interact # 保持与服务器端的连接

      运行方法: except demo.sh

      \r \n 的区别: https://www.jianshu.com/p/23804b0b03c8

# 2. 向服务器传输文件 & ssh 登录服务器自动化脚本

  • except 与 shell 脚本结合

    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
    #!/bin/bash
    #!/usr/bin/expect

    # 自动上传文件到服务器
    auto_scp(){
    # -c: 执行脚本前先执行的命令
    expect -c "set timeout -1;
    spawn scp yourfile root@10.10.10.10:/target_dir/
    expect {
    \"yes/no\" { send \"yes\n\"; exp_continue}
    \"password\" { send \"yourpasswd\n\" } # \n 和 \r 均可以
    }
    interact
    "
    }

    # ssh登录服务器
    auto_ssh_restart() {
    expect -c "set timeout -1;
    spawn ssh root@10.10.10.10
    expect \"password\"
    send \"yourpassword\r\"
    expect \"]#\" { send \"pwd\n\" }
    interact"
    }

    auto_scp
    auto_ssh_restart
点绛唇·途中逢管倅
憔悴天涯,故人相遇情如故。别离何遽,忍唱阳关句!
我是行人,更送行人去。愁无据。寒蝉鸣处,回首斜阳暮。
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

chaihj15 微信支付

微信支付

chaihj15 支付宝

支付宝