【转】Shell脚本交互之:自动输入密码
平時在控制臺輸入指令如:sudo、ssh、ftp或者修改admin權限的文件時候都會要求輸入password,但是在she'll腳本運行過程中該如何交互實現自動輸入密碼呢?
下面總結三種實現方法:
一、重定向:用重定向方法實現交互的前提是指令需要有參數來指定密碼輸入方式,如ftp就有-i參數來指定使用標準輸入來輸入密碼
shell用重定向作為標準輸入的用法是:cmd<<delimiter ,shell 會將分界符delimiter之后直到下一個同樣的分界符之前的內容作為輸入
實現ftp自動登錄并運行l(wèi)s指令的用法如下:其中zjk為用戶名,zjk123為密碼
ftp -i -n 192.168.21.46 <<EOF
user zjk zjk123
ls
EOF
二:管道:跟重定向一樣,指令同樣要有參數來指定密碼輸入方式,如sudo的-S參數,passwd的-stdin參數
所以實現sudo自動輸入密碼的腳本如下:其中zjk123為密碼
echo 'zjk123' | sudo -S cp file1 /etc/hosts
實現自動修改密碼的腳本寫法如下:
echo 'password' | passwd -stdin username
三:expect:上面介紹的兩種方法前提條件是指令有參數來設定密碼輸入方式,像ssh指令就沒有這樣的參數,第三種交互方式就派上用場了
expect就是用來做交互用的,基本任何交互登錄的場合都能使用,但是需要安裝expect包
CentOS下安裝命令:yum install expect
語法如下:
#!/bin/expect
set timeout 30
spawn ssh -l jikuan.zjk 10.125.25.189
expect "password:"
send "zjk123"
interact
注意:expect跟bash類似,使用時要先登錄到expect,所以首行要指定使用expect
在運行腳本時候要expect file,不能sh file了
上面語句第一句是設定超時時間為30s,spawn是expect的語句,執(zhí)行命令前都要加這句
expect "password:"這句意思是交互獲取是否返回password:關鍵字,因為在執(zhí)行ssh時會返回輸入password的提示:jikuan.zjk@10.125.25.189's password:
send就是將密碼zjk123發(fā)送過去
interact代表執(zhí)行完留在遠程控制臺,不加這句執(zhí)行完后返回本地控制臺
expect基礎
expect常用的四個命令:
spawn
啟動新的進程
expect
從進程接收字符串
send 用于向進程發(fā)送字符串
interact 允許用戶交互
詳細解釋:
spawn命令用來啟動新的進程,spawn后的send和expect命令都是和使用spawn打開的進程進行交互。
send命令接收一個字符串參數,并將該參數發(fā)送到進程。
expect命令和send命令相反,expect通常用來等待一個進程的反饋,我們根據進程的反饋,再發(fā)送對應的交互命令。
interact命令用的其實不是很多,一般情況下使用spawn、send和expect命令就可以很好的完成我們的任務;但在一些特殊場合下還是需要使用interact命令的,interact命令主要用于退出自動化,進入人工交互。比如我們使用spawn、send和expect命令完成了ftp登陸主機,執(zhí)行下載文件任務,但是我們希望在文件下載結束以后,仍然可以停留在ftp命令行狀態(tài),以便手動的執(zhí)行后續(xù)命令,此時使用interact命令就可以很好的完成這個任務。
---------------------
轉自:https://blog.csdn.net/zhangjikuan/article/details/51105166
總結
以上是生活随笔為你收集整理的【转】Shell脚本交互之:自动输入密码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用自己的服务器搭建专属私有云盘&
- 下一篇: java 删除某一个学生_java编写一