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

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

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

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

下面总结三种实现方法。linux

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

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

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

 

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

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

 

       因此实现sudo自动输入密码的脚本以下:其中zjk123为密码spa

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

      echo 'password' | passwd -stdin username

code

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

       expect就是用来作交互用的,基本任何交互登陆的场合都能使用,可是须要安装expect包blog

      语法以下:

 

  1.  
    #!/bin/expect
  2.  
    set timeout 30
  3.  
    spawn ssh -l jikuan.zjk 10.125.25.189
  4.  
    expect "password:"
  5.  
    send "zjk123\r"
  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表明执行完留在远程控制台,不加这句执行完后返回本地控制台 

相关文章
相关标签/搜索