linux 遠端檔案同步 shell

2021-07-16 05:21:06 字數 1512 閱讀 5302

127.0.0.1 username password

192.168.12.12 usename password

編寫expect shell

#!/usr/bin/expect -f

set timeout -1

#永不超時,預設為10s

set src_file [lindex $argv

0] #argv引數讀取,必須是argv

set user_name [lindex $argv

1]set host_ip [lindex $argv

2]set dest_file [lindex $argv

3]set password [lindex $argv

4]spawn scp $src_file

$user_name@$host_ip:$dest_file

expect

}"*assword:"

}expect eof

編寫批量 shell,傳的引數為檔名和上傳到機器的路徑

#!/bin/bash

#$0含義

file_name=$1

# =不能空格

file_path=$2

#逐行讀取machine_info裡面的資料,while read不能改

while

read line

do ip=`echo

$line | cut -d

' '-f

1` user_name=`echo

$line | cut -d

' '-f

2` password=`echo

$line | cut -d

' '-f

3` sshpass -p $password ssh $user_name@$ip mkdir -p $file_path

#後面的

./expect.sh $file_name

$user_name

$ip$file_path

$password

done

< machine_info

注:mkdir沒有為你建立,有的話就什麼都不做,為什要加上/dev/null?

原因是while重定向機制,machine_info檔案中的資訊都已經讀入並重定向給了整個while語句。所以當我們在while迴圈中再一次呼叫read語句,就會讀取到下一條記錄。問題就出在這裡,ssh語句正好會讀取輸入中的所有東西,可以用下面命令證明:

sshpass -p

$password ssh $user_name@$ip cat

會發現列印出所有內容,這就導致呼叫完ssh語句後,輸入快取中已經都被讀完了,當read語句再讀的時候當然也就讀不到紀錄,迴圈也就退出了。因此就要讓ssh重定向,就要加/dev/null,或者改用for來執行迴圈,還有的說ssh加乙個-n也行。

rsync遠端檔案同步

伺服器端 配置rsyncd.conf.位置 etc rsyncd.conf 密碼檔案 啟動rsync服務 rsync daemon 客戶端 密碼檔案裡只需要記錄密碼,不需要記錄使用者名稱.此密碼需要和伺服器端密碼檔案內密碼一致.chown user group 密碼檔案 chmod 0600 密碼檔...

python遠端同步檔案 自動同步檔案到遠端伺服器

我要實現的是在本地目錄修改檔案,自動同步更新到服務端去。更改了的安裝包需要同步部署到其他伺服器去。我們需要run rsync.sh和auto sync.sh兩個指令碼,假定需要同步的目錄在.data目錄下。我們用rsync來同步,很多系統都自帶了這個工具。自動輸入密碼 run rsync.sh us...

linux遠端同步命令 scp

scp 在區域網中,把檔案從乙個主機同步到另乙個主機 引數 r 遞迴複製目錄 命令格式 scp r 使用者名稱 原主機名 ip 原始檔路徑 使用者名稱 目標主機名 ip 目標路徑 演示 1.準備兩台虛擬機器hadoop101和hadoop102 2.在hadoop101的 home sdong 下建...