linux指令碼實現自動輸入密碼
使用Linux的程式設計師對輸入密碼這個舉動一定不陌生,在Linux下對使用者有嚴格的許可權限制,幹很多事情越過了許可權就得輸入密碼,比如使用超級使用者執行命令,又比如ftp、ssh連線遠端主機等等,如下圖
那麼問題來了,在指令碼自動化執行的時候需要輸入密碼怎麼辦?比如你的腳本里有一條scp語句,總不能在指令碼執行到這一句時手動輸入密碼吧
針對於ssh或scp命令,可能有人會回答是建立信任關係,關於建立ssh信任關係的方法請自行百度Google,只需要兩行簡單的命令即可搞定,但這並不是常規的解決方案,如果是ftp連線就沒轍了,況且,你不可能為了執行某些命令去給每個你要連線的主機都手動建立ssh信任,這已經偏離了今天主題的本意,今天要說的是在腳本里自動輸入密碼,我們可以想象下,更優雅的方式應該是在腳本里自己配置密碼,當螢幕互動需要輸入時自動輸入進去,要達到這樣的效果就需要用到expect
安裝
CentOS下安裝命令很簡單,如下
sudo yum install expect
至於Mac使用者,可以通過homebrew安裝(需要先安裝homebrew,請自行Google)
brew install expect
測試指令碼
我們寫一個簡單的指令碼實現scp拷貝檔案,在腳本里配置密碼,儲存為scp.exp如下
#!/usr/bin/expect set timeout 20 if { [llength $argv] < 2} { puts "Usage:" puts "$argv0 local_file remote_path" exit 1 } set local_file [lindex $argv 0] set remote_path [lindex $argv 1] set passwd your_passwd set passwderror 0 spawn scp $local_file $remote_path expect { "*assword:*" { if { $passwderror == 1 } { puts "passwd is error" exit 2 } set timeout 1000 set passwderror 1 send "$passwd\r" exp_continue } "*es/no)?*" { send "yes\r" exp_continue } timeout { puts "connect is timeout" exit 3 } }
注意,第一行很重要,通常我們的腳本里第一行是#!/bin/bash
,而這裡是你機器上expect程式的路徑,說明這段指令碼是由expect來解釋執行的,而不是由bash解釋執行,所以程式碼的語法和shell指令碼也是不一樣的,其中set passwd your_passwd
設定成你自己的密碼,然後執行如下命令
./scp.exp ./local_file [email protected]:/xx/yy/
執行前確保scp.exp有執行許可權,第一個引數為你本地檔案,第二個為遠端主機的目錄,執行指令碼如果報錯“connect is timeout”,可以把超時設長一點,第二行set timeout 20
還能做什麼
細心的同學一定發現了,其實expect提供的是和終端的一種互動機制,輸入密碼只是其中一種應用形式,只要是在終端阻塞需要輸入時,都可以通過expect指令碼完成自動輸入,比如前面腳本里配置了兩種互動場景,一種是終端提示"password:"時輸入密碼,還有一種是提示"yes/no)?"時輸入“yes”,如果和遠端主機是第一次建立連線,執行scp.exp指令碼效果是這樣的
所以我們可以根據終端的提示來配置輸入命令,這樣就能達到了自動化的效果。至於處理其它互動場景,只需要照著上面的指令碼依葫蘆畫瓢就行了
相關推薦
linux指令碼實現自動輸入密碼
使用Linux的程式設計師對輸入密碼這個舉動一定不陌生,在Linux下對使用者有嚴格的許可權限制,幹很多事情越過了許可權就得輸入密碼,比如使用超級使用者執行命令,又比如ftp、ssh連線遠端主機等等,如下圖 那麼問題來了,在指令碼自動化執行的時候需要輸入密碼怎麼辦?比如你
linux 普通使用者登入後,執行 shell指令碼切自動輸入密碼切換到root
1.首先安裝expect 2.2.編寫指令碼 /home/zukgit/suz.sh #!/bin/bash # #!/usr/bin/expect -f 使用這種方式 程式無法執行 expect -c " spawn su - expect \":\" send
ssh采用expect實現自動輸入密碼登錄、拷貝
cep .html tro from 效果 方式 目標 led 交互 1. 引言 最近做了一個項目,需要頻繁與另一臺主機進行文件的傳輸;中間想到了很多方式:FTP、samba、curl等,但是還是感覺scp最好用。 SCP使用教程可參閱:http://www.jb51.
ubuntu執行sh指令碼sudo自動輸入密碼
示例: sudo apt-get update 第一種方法:使用管道(上一個命令的 stdout 接到下一個命令的 stdin): #!/bin/bashecho password | sudo
shell指令碼中自動輸入密碼
在shell指令碼中需要用root用的來執行指令:sudo 自動輸入密碼echo "password" | sudo -S netstat -tlnp -S The -S (stdin) option causes sudo to read t
linux使用expect實現自動登入(自動輸入密碼)
小蝙個人比較懶,每次都要登入多臺伺服器上工作,都要檢視note,什麼ip啦,埠啦,使用者名稱啦,密碼啦如果只有一個,那還是挺好記的,但是如果有10個,甚至更多,而且為了安全,每個伺服器的密碼都不一樣,ip和埠也不一樣,這樣就非常痛苦了,顧小蝙利用了一下expect軟體,用指令
Linux自動切換使用者指令碼,自動輸入使用者名稱密碼
需要安裝tcl 和expect包 實現自動切換使用者: #!/usr/bin/expect -f spawn su - root expect "Password:" send "hadoop
bash指令碼,自動輸入sudo的密碼
解決方法: echo + | (管道) 開始使用 echo "admin" | sudo service tomcat7 stop 始終提示輸入密碼 後來查看了下sudo命令的使用 man sudo 發現有如下的解釋: -S
linux 指令碼實現程式自動安裝
#!/bin/bash //設定指令碼中所需命令的執行路徑 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH // $? 是取得上面執行命令的返回值,一般正確為0,錯誤為1 if [ "
Linux下後臺程式完成自動輸入密碼等互動行為的例子
今天要開發一個定時任務,然後加入cron列表中。但是有個問題擺在眼前,指令碼的執行中需要輸入資料庫密碼: mysql -u root -p << SQL use db; set names utf8; `cat task.sql` SQL 執行上述程式碼後,會
Shell指令碼互動之:自動輸入密碼
Shell指令碼互動之:自動輸入密碼 2016年04月09日 19:41:26 zhangjikuan 閱讀數:58208 標籤: Shell互動自動輸入密碼expect重定向管道 更多
指令碼連結 ssh 自動輸入密碼
上週工作中,遇見一些重複性的工作,為了方便,於是寫起了指令碼。 在這個指令碼中,需要通過 s s
python, linux shell 使用expect模組自動輸入密碼
Pexpect 是一個自動控制的 Python 模組,可以用來ssh、ftp、passwd、telnet 等命令列進行自動互動。 官方網站是 http://www.noah.org/ 通過它,可以實現類似 expect 的操作。 例如我們可以用它來寫python指令碼
linux使用shell指令碼實現自動登入scp傳輸檔案到其他伺服器
執行 sudo yum install expect 安裝自動登入expect工具 我們是配置了多臺伺服器進行控制多臺伺服器的檔案傳輸,使用scp命令進行copy檔案到指定伺服器的指定檔案目錄,一般複製到home目錄因為這個目錄對外有可執行許可權 下面我們看下會用到的檔
sudo 自動輸入密碼的指令碼 alias別名
【alias簡介】alias 命令用於定義一個命令的簡寫格式,例如,alias lsproc='ls -l /proc',其中定義了一個新的命令lsproc,以後當輸入lsproc的時候,都會執行ls -l proc,顯示proc的目錄內容為了使alias永久生效,可以將
以一個例子來講ubuntu12.04下指令碼檔案內執行sudo 命令自動輸入密碼
原文連線http://blog.sina.com.cn/s/blog_951ca19b0101be96.html 在上一篇的文章中(發文時間為2012-10-30 16:09),掛載U盤指令碼檔案和解除安裝U盤指令碼檔案中都用到sudo命令,因此需要使用者手動的輸入密
在指令碼中呼叫psql如何自動輸入密碼
設定環境變數PGPASSWORD #linux export PGPASSWORD=12345 #windows set PGPASSWORD=12345 使用密碼檔案.pgpass 在
通過expect免自動輸入密碼登陸遠程服務器
新建 文件 安裝 nbsp exp 輸入密碼 spa 執行 0.10 通過expect免自動輸入密碼登陸遠程服務器 1、前提必須已經安裝expect 2、新建login.sh,文件內容如下 #!/usr/bin/expect -f spawn ssh [email
shell中scp自動輸入密碼
shell``` #!/bin/bash des_pass=testtest expect -c " spawn scp target/aaa-0.0.1.war [email protected]/* */:/home/GameUser/MagicvesselUserWeb/aaa-releas
Linux上實現ssh免密碼登陸遠程服務器
Linux上實現ssh免密碼登陸遠程服務平常使用ssh登陸遠程服務器時,都需要使用輸入密碼,希望可以實現通過密鑰登陸而免除輸入密碼,從而可以為以後實現批量自動部署主機做好準備。 環境如下: IP地址 操作系統 服務器端 10.0.0.10 CentOS 6.5 x86 客戶端 10.0.0