scp命令不輸入密碼傳輸檔案的兩種方法

2021-10-05 06:32:59 字數 1230 閱讀 9348

設定伺服器無秘鑰登入

expect用於自動化地執行linux環境下的命令列互動任務,例如scp、ssh之類需要使用者手動輸入密碼然後確認的任務。有了這個工具,定義在scp過程中可能遇到的情況,然後編寫相應的處理語句,就可以自動地完成scp操作了。

下面就是乙個使用expect來完成scp時無需輸入密碼的指令碼:

#!/usr/bin/expect

set timeout 10

set host [lindex $ar** 0]

set username [lindex $ar** 1]

set password [lindex $ar** 2]

set src_file [lindex $ar** 3]

set dest_file [lindex $ar** 4]

spawn scp $src_file $username@$host:$dest_file

expect

}"*assword:"

}expect "100%"

expect eof

注意**剛開始的第一行,指定了expect的路徑,與shell指令碼相同,這一句指定了程式在執行時到**去尋找相應的啟動程式。**剛開始還設定了timeout的時間為10秒,如果在執行scp任務時遇到了**中沒有指定的異常,則在等待10秒後該指令碼的執行會自動終止。

從以上**剛開始的幾行可以看出,我為這個指令碼設定了5個需要手動輸入的引數,分別為:目標主機的ip、使用者名稱、密碼、本地檔案路徑、目標主機中的檔案路徑。如果將以上指令碼儲存為expect_scp檔案,則在shell下執行時需要按以下的規範來輸入命令:

./expect_scp 192.168.75.130 root 123456 /root/src_file /root/dest_file

以上的命令執行後,將把本地/root目錄下的src_file檔案拷貝到使用者名為root,密碼為123456的主機192.168.75.130中的/root下,同時還將這個原始檔重新命名為dest_file。

spawn代表在本地終端執行的語句,在該語句開始執行後,expect開始捕獲終端的輸出資訊,然後做出對應的操作。expect**中的捕獲的(yes/no)內容用於完成第一次訪問目標主機時儲存金鑰的操作。有了這一句,scp的任務減少了中斷的情況。**結尾的expect eof與spawn對應,表示捕獲終端輸出資訊的終止。

使用expect需要了解的一點是:用expect速度會比較慢,因為需要等待返回的資料,然後輸入命令執行,沒有ssh金鑰登入的快速

遠端傳輸檔案命令 scp

1 概述 在使用 scp 命令把檔案從本地複製到遠端主機時,首先需要以絕對路徑的形式寫清本地 檔案的存放位置。如果要傳送整個資料夾內的所有資料,還需要額外新增引數 r 進行遞迴操 作。然後寫上要傳送到的遠端主機的 ip 位址,遠端伺服器便會要求進行身份驗證了。當前用 戶名稱為 root,而密碼則為遠...

Ubuntu不輸入密碼執行sudo命令方法介紹

作為ubuntu等桌面系統,預設登入的帳號是沒有root許可權的,為了提公升許可權來執行任務,我們一般用到sudo 命令來執行,但是不難發現我們一般都要輸入密碼。那麼有沒有什麼方法可以讓我們執行sudo的時候不輸入密碼呢?當然有咯。那就是對sudoers檔案進行修改。進入終端,執行 sudo vi ...

linux檔案傳輸命令 scp

首先在兩台互傳檔案的電腦上都要安裝 ssh服務 1 yum y install openssh 2 yum y install openssh clients 1 獲取遠端伺服器上的檔案 scp p 2222 root www.vpser.net root lnmp0.4.tar.gz home l...