linux下spawn 與scp 等傳輸命令結合

2021-09-02 08:34:10 字數 2555 閱讀 8047

本文系統centos6.0

1.方法1:簡便方法

upload ()

{} "*assword:"

-re .  

eof 

}eod

}由於expect和bash的關鍵字不一樣,所以使用bash -c進行關鍵字轉換,否則會出現找不到檔案的提示。

2.方法2,用於密碼又特殊字元的情況

tmp_expect_file="/tmp/test_scp$$"

local_ip=`grep "ip" $(cd "$(dirname "$0")";pwd)/temp_ipfile | awk -f"=" ''`

#generate expect

echo '#!/usr/bin/expect

set local_ip [lindex $argv 0]

set remote_ip [lindex $argv 1]

set cp_file [lindex $argv 2]

set remote_dir [lindex $argv 3]

set user [lindex $argv 4]

set passwd [lindex $argv 5]

set timeout 5

set timeout -1  用於無限時間

spawn scp -o bindaddress=$local_ip -o "rsaauthentication no" -o "publickeyauthentication no" $cp_file

$user@$remote_ip:$remote_dir

expect

"*yes/no*"

*assword*" }

expect

"*:~*"

"*denied*"

"*try again*" 

"*last login:*"  }

expect timeout

expect eof

' > $

chmod u+x $ || return 1

expect -d -f "$" "$local_ip" "$remote_ip" "$cp_file" "$remote_dir" "$user" "$passwd" 2>&1 >> $log

return $?

expect是unix系統中用來進行自動化控制和測試的軟體工具,由don libes製作,作為tcl指令碼語言的乙個擴充套件,應用在互動式軟體中如telnet,ftp,passwd,fsck,rlogin,tip,ssh等等。該工具利用unix偽終端包裝其子程序,允許任意程式通過終端接入進行自動化控制;

1、安裝

1 yum install expect expect-devel -y

2、編寫script

#!/usr/bin/expect 

if  

set src_file [lindex $argv 0] 

set username [lindex $argv 1] 

set host_ip [lindex $argv 2] 

set dest_file [lindex $argv 3] 

set password [lindex $argv 4] 

spawn scp  -r $src_file $username@$host_ip:$dest_file 

expect  

} "*assword:" } 

expect "100%"

expect eof

3、用法例項:

你也可以使用其他帳號;

上面實現了對單台機器複製;

4、批量伺服器複製

#!/bin/bash 

src_file=$1

username=$2

host_list=$3

dest_file=$4

password=$5

cat $host_list | while read line 

dohost_ip=`echo $line | awk ''` 

./allscp.sh $src_file $username $host_ip $dest_file $password 

done

用法例項:

希望大家有更好的介意~

推薦閱讀

批量scp指令碼——從多台機器拷貝檔案 

linux scp 和 ssh 命令 

linux系統常用的cpio命令及scp命令 

linux cp scp命令使用 

linux伺服器 scp 不需要密碼配置 

linux 下 scp 的用法

copy 本地的檔案到遠端的機器上 scp etc lilo.conf k net67.ee.oit.edu.tw home k 會將本地的 etc lilo.conf 這個檔案 copy 到 net67.ee.oit.edu.tw,使用者 k 的家目錄下。copy遠端機器上的檔案到本地來 scp ...

Linux下scp的用法

scp就是secure copy,乙個在linux下用來進行遠端拷貝檔案的命令。有時我們需要獲得遠端伺服器上的某個檔案,該伺服器既沒有配置ftp伺服器,也沒有做共享,無法通過常規途徑獲得檔案時,只需要通過簡單的scp命令便可達到目的。一 將本機檔案複製到遠端伺服器上 scp home adminis...

linux下scp的應用

scp 命令是 ssh 中最方便有用的命令了,試想,在兩台伺服器之間直接傳送檔案,僅僅用 scp 乙個命令就完全解決了。你可以在一台伺服器 上以 root 身份執行 scp servername home ftp pub file1 這樣就把另一台伺服器上的檔案 home ftp pub file1...