ssh自動登入指令碼

2021-05-27 01:33:16 字數 1598 閱讀 9042

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

ssh -d port user@host

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

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

#!/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"

interact

把上面的**命名成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.interact:等待接受檔案結束符。

收藏 分享

shell指令碼實現ssh自動登入

功能 shell指令碼實現ssh自動登入,裡面有些注釋掉的是編寫時遇到的一些問題和除錯資訊 說明 login fwq 登入賬戶名 login fwq ip 登入ip login fwq pw 登入密碼 如下 fwqs ssh.sh 指令碼內容,login fwq xcz login fwq ip 1...

ssh自動登入

1.進入 目錄 ssh cd ssh 2.生成 key ssh keygen t rsa 這是會在目錄下產生 id rsa id rsa.pub 這兩個檔案 3.將 密碼檔案 id rsa.pub 上傳到 ssh 的伺服器 上 ssh copy id i ssh id rsa.pub 使用者名稱 i...

自動登入指令碼

為了解決不同網路空間的問題,本來是想通過改變環境變數的方式,不過最終還是 選擇了在shell指令碼下,選擇了網路空間後執行指令碼。同時這個庫,還可以實現相應的檔案傳輸功能,這也是比較划算的乙個功能。usr bin python coding utf 8 auther vchao 16.12.16 i...