zoukankan      html  css  js  c++  java
  • Shell脚本交互之:自动输入密码

    Shell脚本交互之:自动输入密码

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangjikuan/article/details/51105166

    平时在控制台输入指令如:sudo、ssh、ftp或者修改admin权限的文件时候都会要求输入password,但是在she'll脚本运行过程中该如何交互实现自动输入密码呢?

    下面总结三种实现方法。

    一、重定向:用重定向方法实现交互的前提是指令需要有参数来指定密码输入方式,如ftp就有-i参数来指定使用标准输入来输入密码

            shell用重定向作为标准输入的用法是:cmd<<delimiter ,shell 会将分界符delimiter之后直到下一个同样的分界符之前的内容作为输入

      实现ftp自动登录并运行ls指令的用法如下:其中zjk为用户名,zjk123为密码        

    1.  
      ftp -i -n 192.168.21.46 <<EOF
    2.  
      user zjk zjk123
    3.  
      ls
    4.  
      EOF

    二:管道:跟重定向一样,指令同样要有参数来指定密码输入方式,如sudo的-S参数,passwd的-stdin参数

           所以实现sudo自动输入密码的脚本如下:其中zjk123为密码

          echo 'zjk123' | sudo -S cp file1 /etc/hosts
          实现自动修改密码的脚本写法如下:

          echo 'password' | passwd -stdin username

    三:expect:上面介绍的两种方法前提条件是指令有参数来设定密码输入方式,像ssh指令就没有这样的参数,第三种交互方式就派上用场了

           expect就是用来做交互用的,基本任何交互登录的场合都能使用,但是需要安装expect包

          语法如下:

    1.  
      #!/bin/expect
    2.  
      set timeout 30
    3.  
      spawn ssh -l jikuan.zjk 10.125.25.189
    4.  
      expect "password:"
    5.  
      send "zjk123 "
    6.  
      interact
    注意:expect跟bash类似,使用时要先登录到expect,所以首行要指定使用expect

    在运行脚本时候要expect  file,不能sh file了

    上面语句第一句是设定超时时间为30s,spawn是expect的语句,执行命令前都要加这句

    expect "password:"这句意思是交互获取是否返回password:关键字,因为在执行ssh时会返回输入password的提示:jikuan.zjk@10.125.25.189's password:

    send就是将密码zjk123发送过去

    interact代表执行完留在远程控制台,不加这句执行完后返回本地控制台 

  • 相关阅读:
    COCOS2D-X中UI动画导致闪退与UI动画浅析
    使用cocos2d-x3.4结合cocos2.1.5制作小游戏《亲亲小熊》
    algorithm 学习之 for_each
    cocos2dx 3.2 Touch Listen和menu回调实现截屏
    Lua 中string.gsub(sourceString, pattern, replacementString) 返回值有两个
    python 装饰器模式 我的理解
    Https SSL Knowledge & how to get a self-signed certificate on ubuntu.
    公钥和私钥的理解
    Openwrt UCI 快捷切换SS 配置
    iptables ipset 实用命令
  • 原文地址:https://www.cnblogs.com/wangziyi0513/p/10216499.html
Copyright © 2011-2022 走看看