提供使用者名稱和密碼的SSH自動登入指令碼

2021-08-30 20:18:32 字數 1596 閱讀 8469

使用vpn,每次都要在terminal上重複輸入命令:

ssh -d port user@host

出來密碼提示符後,把複雜的密碼拷貝下來,然後貼上到terminal,敲回車...

終於忍受不了這樣的重複了,於是用shell寫乙個可以自動登入的指令碼:

shell script**

#!/usr/bin/expect -f

set port port_no

set user user_name

set host host_name

set password my_password

set timeout -1

spawn ssh -d $port $user@$host

expect "*assword:*"

send "$password\r"

expect eof

把上面的**命名成vpn,並設定755的許可權之後,使用起來就方便了:./vpn。

上面指令碼中的自動互動用到了expect,那麼什麼是expect呢?

expect是乙個基於tcl的用於自動互動操作的工具語言,它適合用來編寫需要互動的自動化指令碼,比如上面提到的ssh輸入使用者名稱密碼,自動ftp等等場景。

除了具有tcl的語法,expect提供了幾個常用的命令:

1. send

用來傳送乙個字串,比如 send "hello world"。

初始情況下,這個字串會傳送到標準輸出。如果你用的是max osx或者linux,可以在terminal下直接輸入expect命令並回車,就進入了expect互動環境,此時,輸入send "hello world"就可以看到結果。

一旦你的程式已經與其他程式進行互動,字串就會被傳送到其他程式那裡。如上面的例子指令碼中,我們呼叫send 」$password\r"就是把密碼傳送給ssh連線的伺服器端指定埠。

2. expect

與send相反,expect用來等待你所期望的字串。比如expect "hello"

在expect後面跟的字串中,你可以指定乙個正規表示式。

expect會一直等待下去,除非收到的字串與預期的格式匹配,或者到了超期時間。

3. spawn

spawn用來啟動乙個新的程序,比如上面的spawn ssh -d $port $user@$host,expect會執行命令「ssh -d $port $user@$host」。

在互動式的場景中,當你輸入命令後,可能伺服器端會返回一些操作提示符,以讓你輸入命令。expect提供了這樣三個常用的命令,spawn, expect和send,恰好滿足這種需要。把它們結合起來使用,可以實現很多簡單的自動化指令碼。

其它常用的命令還有:interact,比如你通過指令碼自動連線到了某個ftp,並輸入了使用者名稱密碼,此時需要人工輸入一些命令,就可以使用interact命令,它會把指令碼的控制權交給使用者;sleep,等待多少秒等等。

由於expect是從tcl繼承下來的,所以也支援tcl的語法和命令,比如變數宣告、流程控制等等。

上面指令碼的一些解釋:

1. set timeout 300:設定超時時間300s。如果設為-1,代表永不超時。

2. expect eof:等待接受檔案結束符。

Git 自動儲存使用者名稱密碼

清空了git的賬戶設定,於是每次更新都需要重新輸入使用者名稱及密碼。所以需要設定 輸入一次之後自動儲存使用者名稱及密碼 安裝配置好git後,在c 使用者 administrator 目錄下有乙個 gitconfig 的檔案,這就是git的配置檔案,開啟這個檔案,裡面會有你先前配好的name 和ema...

儲存的使用者名稱和密碼

在windows xp pro裡,經常需要訪問 儲存使用者名稱和密碼 對話方塊,例如增加遠端計算機的訪問憑據,或者刪除microsoft passport的登入資訊。但是這個元件隱藏的比較深,可以借助以下兩種方式 1.在控制面板裡開啟 使用者帳戶 選擇當前登入帳戶,然後單擊左上方的 管理我的網路密碼...

tomcat的使用者名稱和密碼

在tomcat使用startup 啟動之後,訪問本機8080埠會自動進入tomcat的管理介面,其中 下面這三個功能需要使用者名稱和密碼,才能訪問,否則就會出現403許可權不夠的情況,那tomcat的使用者名稱和密碼在哪儲存呢?1 通過訪問失敗的這段英語我們可以很清晰的看到 在conf 下有乙個to...