網站首頁 編程語言 正文
概述
日常開發過程中,經常會有一些自動化的操作受制于密碼,當然,密碼是安全的。
常見的一些應用場景,如ssh連接服務器、mysql登錄與備份、git上傳、網站登錄、ftp登錄、telnet等等。
那么我們今天就講如何在自動化過程中,自動的在tel終端中填充密碼(基于python的包)。
一、pexpect第三方包
Expect腳本語言,它是由TCL語言實現的,主要用于人機交互式對話的自動化控制,pexpect就是在python的基礎上開發出的類似Expect功能的模塊。它的實現分為四部分:
- 創建pexpect程序手柄
- 通過內置expect方法等待關鍵字
- 匹配完成后授權手柄完成密碼的填充
- 結束手柄并將控制權授予用戶終端Terminal(如果需要的話)
二、參數一欄
spawn | timeout | maxread | searchwindowsize | logfile | expect |
---|---|---|---|---|---|
logfile_read | cwd | env | ignore_sighup | delaybeforesend | expect_exact |
expect_list | expect_loop | send | sendline | sendcontrol | sendeof |
sendintr | interact | close | terminate | Kill | flush |
isalive | isatty | next | read | readline | readlines |
setecho | setwinsize | wait | waitnoecho | write | writelines |
before | after | match |
三、話不多說,上代碼
下面的案例是我導出數據庫數據寫的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?自動填充密碼內容請搜索AB教程網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持AB教程網!
原文鏈接:https://blog.csdn.net/weixin_49278803/article/details/129065286
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-07-28 Python知識點詳解之正則表達式語法_python
- 2024-03-03 layuiadmin新建tabs標簽頁,點擊保存,打開新的標簽頁并刷新
- 2022-07-20 C語言實例講解嵌套語句的用法_C 語言
- 2022-05-26 openwrt安裝docker并啟動的操作方法_docker
- 2022-06-18 C#如何在窗體程序中操作數據庫數據_C#教程
- 2022-07-04 C#?WinForm制作登錄界面的實現步驟_C#教程
- 2022-12-05 python如何在文件中部插入信息_python
- 2022-06-12 python將Dataframe格式的數據寫入opengauss數據庫并查詢_python
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支