shell脚本执行命令自动填充密码(自动输入密码)

 更新时间:2023年02月21日 10:21:19   作者:学无止境gwx  
这篇文章主要介绍了shell 执行命令自动填充密码,文中结合实例代码通过三种方式讲解了Shell 脚本自动输入密码的方法,需要的朋友可以参考下

概述

日常开发过程中,经常会有一些自动化的操作受制于密码,当然,密码是安全的。
常见的一些应用场景,如ssh连接服务器、mysql登录与备份、git上传、网站登录、ftp登录、telnet等等。
那么我们今天就讲如何在自动化过程中,自动的在tel终端中填充密码(基于python的包)。

一、pexpect第三方包

Expect脚本语言,它是由TCL语言实现的,主要用于人机交互式对话的自动化控制,pexpect就是在python的基础上开发出的类似Expect功能的模块。它的实现分为四部分:

  • 创建pexpect程序手柄
  • 通过内置expect方法等待关键字
  • 匹配完成后授权手柄完成密码的填充
  • 结束手柄并将控制权授予用户终端Terminal(如果需要的话)

二、参数一栏

spawntimeoutmaxreadsearchwindowsizelogfileexpect
logfile_readcwdenvignore_sighupdelaybeforesendexpect_exact
expect_listexpect_loopsendsendlinesendcontrolsendeof
sendintrinteractcloseterminateKillflush
isaliveisattynextreadreadlinereadlines
setechosetwinsizewaitwaitnoechowritewritelines
beforeaftermatch

三、话不多说,上代码

下面的案例是我导出数据库数据写的demo,执行语法python backup.py >> backup.sql

import pexpect

# cmd = 'mysqldump -h 127.0.0.1 -uroot -P3306 -p123456 your-database'
cmd = 'mysqldump -h 127.0.0.1 -uroot -P3306 -p your-database'
proc = pexpect.spawn(cmd)
# 字串串匹配到返回值为0,列表匹配到返回列表中对应的下标
index = proc.expect('password:')
print(f'匹配到: {index} =>')
proc.sendline('123456')
proc.interact()

参考文章链接:

Pexpect 模块使用说明

Python模块Pexpect详解

补充:Shell 脚本自动输入密码的三种方式

注意,如果创建.sh文件后不可以执行,请执行sudo chmod 755 文件名.sh来修改权限。

方式一

使用 echo “密码” | (管道符)

使用场景: sudo 命令

在使用普通用户执行 root 命令时有时候会需要输入密码,并且在输入密码后一段时间不需要再次输入(但是不影响),这时候可以使用

echo "密码" | sudo 命令

比如我需要一键清空服务器,则可以创建一个clear.sh文件(假使我的密码是 123456):

echo "123456" | sudo rm -rf /*

那么在执行的时候,我只需要./clear.sh就可以清空我的整个数据库。

方式二

重定向

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

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

使用场景:不仅仅输入一个密码,还需要输入用户名。

ftp -i -n 192.168.21.46 <<EOF
user 用户名 密码
EOF

方式三

expect

echo + 管道符不是什么时候都可以生效(比如我写的自动提交博客脚本最后需要输入我的服务器的 git 仓库密码就不生效),因此我们可以使用 expect 方法来执行。

set timeout 30
spawn ssh -l 用户名 10.125.25.189
expect "password:"
send "要输入的密码"    
interact

这里的语句是这样的:

设置超时时间为30s

  • spawn 是 expect 的起始语句,可以理解为从此处开始
  • spawn 后面的语句是执行 ssh 连接

expect:当发现password:这个字符串后,在后方输入send后面的内容
send:要输入的密码
interact:执行完留在远程控制台,不加这句执行完后返回本地控制台

再举一个例子

这个例子是我真实的脚本文件(但是磨掉了密码),平时用于往我的服务器中提交 hexo 博客

cd /Users/jim/hexo
echo '123456' | sudo -S hexo clean 
sudo hexo g 
spawn sudo -S hexo d
expect "password:"
send "123456"

首先进入到hexo文件夹下

因为要用到sudo 来 clean/generate/deploy我的博客,所以我这里使用一个 echo+管道符,输入一次 sudo 命令(短时间内不需要再重复输入,所以我只写了一个)

generate 一下 hexo 文件

提交到远程仓库,这里需要输入远程仓库的密码,所以我用spawn标记这句话

expect(发现)到"password:"后执行send

将我的密码 send(发送到)到控制台

到此这篇关于shell 执行命令自动填充密码的文章就介绍到这了,更多相关shell 自动填充密码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

到此这篇关于shell脚本执行命令自动填充密码(自动输入密码)的文章就介绍到这了,更多相关shell 自动输入密码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • linux中常用脚本和函数分享

    linux中常用脚本和函数分享

    这linux中经常需要用到的一些脚本与函数,这里简单的分享下,方便需要的朋友
    2013-02-02
  • 详解adb shell 常用命令

    详解adb shell 常用命令

    这篇文章主要介绍了详解adb shell 常用命令,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • 获取服务器信息的Shell脚本分享(ubuntu、centos测试通过)

    获取服务器信息的Shell脚本分享(ubuntu、centos测试通过)

    这篇文章主要介绍了获取服务器信息的Shell脚本分享(ubuntu、centos测试通过),本文直接给出实现代码,本文脚本实现获取linux发行版名称、查看系统是否为64位、系统内核版本等信息,需要的朋友可以参考下
    2014-12-12
  • 防止ARP攻击的shell代码

    防止ARP攻击的shell代码

    防止ARP攻击,使用命令route、grep、ifconfig等,需要的朋友可以参考下
    2013-02-02
  • Linux shell 提取文件名和目录名的方法

    Linux shell 提取文件名和目录名的方法

    这篇文章主要介绍了Linux shell 提取文件名和目录名的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • Shell实现文本去重并操持原有顺序

    Shell实现文本去重并操持原有顺序

    这篇文章主要介绍了Shell实现文本去重并操持原有顺序,本文分步骤讲解如何解决需求,并给出了若干方法,需要的朋友可以参考下
    2015-03-03
  • Linux 下的 unzip 命令使用示例详解

    Linux 下的 unzip 命令使用示例详解

    Unzip 是一个在 Unix 或类 Unix 系统(例如 Linux)中常用的命令行工具,用于解压缩由 ZIP 压缩算法创建的压缩文件,本文给大家介绍Linux 下的 unzip 命令使用示例详解,感兴趣的朋友一起看看吧
    2023-11-11
  • shell脚本实现随机生成10个8位密码

    shell脚本实现随机生成10个8位密码

    这篇文章主要介绍了shell脚本实现随机生成10个8位密码的方法,这里推荐给大家,有需要的小伙伴的可以参考下。
    2015-03-03
  • linux find命令之exec简单概述

    linux find命令之exec简单概述

    这篇文章主要为大家详细介绍了linux find命令之exec的简单使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • Ubuntu中的sudo和su命令介绍

    Ubuntu中的sudo和su命令介绍

    这篇文章介绍了Ubuntu中的sudo和su命令,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06

最新评论