ssh自動連線(expect)

2021-05-24 15:30:46 字數 2395 閱讀 8219

昨天廖老師讓嘗試使用ssh指令碼進行遠端控制,但是這個東西需要手動去輸入密碼,不能放到後台去執行,於是就考慮有沒有辦法讓他自動輸入密碼呢,經過查閱。最終發現了expect這個東西,很強大的東西,所以我就在本地測試了下,最終實現了不用手動輸入密碼也可以進行遠端連線。

不僅在ssh

連線中可以用到,以後任何需要輸入密碼或者輸入命令的,都可以,不僅保持了該軟體的安全保密性又實現了智慧型性。

拿來與大家分享.

要使用expect

需要預先安裝

tcl這個東西

,然後再安裝

expect包.

我這裡使用的是

tcl8.4.13-src.tar.gz

和expect-5.43.0.tar.gz

的安裝包

./home

目錄下:

安裝

tcl和

expect

#tar zxvf tcl8.4.3-src.tar.gz

#cd tcl8.4.13

#./configure && make && make install

#cp tclunixport.h

../generic/

#tar zxvf expect-5.43.0.tar.gz

#cd expect-5.43/

#./configure --with-tcl=/usr/local/lib/

--with-tclinclude=/

/home/tcl8.4.11/generic/

--with-x=no

#make && make install

介紹幾個命令的含義:

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的語法和命令,比如變數宣告、流程控制等等。

ok,tcl以及expect已經安裝完成了.下面給出scp的乙個expect很簡單的乙個指令碼

乙個簡單的小例子:

#!/usr/local/bin/expect -f

set user root

set host 172.20.10.200

set password 111111

set timeout -1

spawn ssh$user@$host

expect "*password:*"

send "$password/r"

expect eof

SSH自動登入,需安裝expect包

usr bin expect set timeout 30 spawn ssh l root 192.168.1.117 expect password send nopasswd r interact set timeout 30 設定超時時間的,計時單位 秒 spawn ssh l root 1...

Python 自動連線ssh

usr bin python coding utf 8 import sys,time,os try import pexpect except importerror print you must install pexpect module sys.exit 1 addr map try key...

python pexpect 自動連線ssh

使用python pexpect 1.首先是安裝 前提是python2.5以上你已經安裝好了 tar xzvf pexpect 2.1.orig.tar.gz cd pexpect 2.1 python setup.py install 沒許可權時,記得sudo 3.編寫linkssh.py usr...