ssh、scp的使用,以及shell腳本解決scp需要輸入密碼的問題


一、什么是SSH?

簡單說,SSH是一種網絡協議,用於計算機之間的加密登錄。

如果一個用戶從本地計算機,使用SSH協議登錄另一台遠程計算機,我們就可以認為,這種登錄是安全的,即使被中途截獲,密碼也不會泄露。

最早的時候,互聯網通信都是明文通信,一旦被截獲,內容就暴露無疑。1995年,芬蘭學者Tatu Ylonen設計了SSH協議,將登錄信息全部加密,成為互聯網安全的一個基本解決方案,迅速在全世界獲得推廣,目前已經成為Linux系統的標准配置。

需要指出的是,SSH只是一種協議,存在多種實現,既有商業實現,也有開源實現。

 

二、最基本的用法

SSH主要用於遠程登錄。假定你要以用戶名user,登錄遠程主機host,只要一條簡單命令就可以了。

$ ssh user@host
  
eg:
ssh james@192.168.1.119

如果本地用戶名與遠程用戶名一致,登錄時可以省略用戶名。

ssh 192.168.1.119

SSH的默認端口是22,也就是說,你的登錄請求會送進遠程主機的22端口。使用p參數,可以修改這個端口。

三、SCP使用

scp是有Security的文件copy,基於ssh登錄。

操作起來比較方便,比如要把當前一個文件copy到遠程另外一台主機上,可以如下命令。

scp /home/james/data.txt root@192.168.1.119:/home/james

然后會提示你輸入另外那台192.168.1.119主機的root用戶的登錄密碼,接着就開始copy了。

如果想反過來操作,把文件從遠程主機copy到當前系統,也很簡單。

scp james @192.168.1.119:/home/james/data.txt home/james/data.txt
 
四、shell腳本解決scp需要輸入密碼問題
expect就是用來做交互用的,基本任何交互登錄的場合都能使用,但是需要安裝expect包
sudo apt-get install expect

安裝完成之后,書寫腳本scp.sh

#!/usr/bin/expect -f
set timeout 30
spawn scp TcrController james@192.168.1.119:/home/james/ws
expect "*password:"
send "123456\r"
expect eof

注意:expect跟bash類似,使用時要先登錄到expect,所以首行要指定使用expect

在運行腳本時候要expect  file,不能sh file了

首行指定用來執行該腳本的命令程序,這里是/usr/bin/expect

上面語句第一句是設定超時時間為30s,spawn是expect的語句,執行命令前都要加這句

expect "password:"這句意思是交互獲取是否返回password:關鍵字,因為在執行ssh時會返回輸入password的提示:james@192.168.1.119's password:

send就是將密碼123456發送過去

expect eof 子進程已經結束的eof字符,expect腳本也就退出結束

interact代表執行完留在遠程控制台,不加這句執行完后返回本地控制台 

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM