天天看點

如何在shell腳本裡使用sftp批量傳送檔案

主要步驟如下:

1.為運作shell腳本的本地使用者生成密鑰對

2.将其中的公鑰分發到sftp欲登入的遠端伺服器上

3.編寫并以上面的本地使用者運作shell腳本

一.生成密鑰對

在shell腳本中使用sftp時必須用到密鑰對(公鑰和私鑰).可使用下列方式生成(SSH 2.X版本),這裡本地使用者記為:local_user:

$ ssh-keygen -dsa

螢幕提示:

Generating public/private dsa key pair.

Enter file in which to save the key (/home/local_user/.ssh/id_dsa):

# 按回車儲存為: /home/local_user/.ssh/id_dsa,即目前使用者local_user的私鑰

Enter passphrase (empty for no passphrase):

# 按回車,表示讀取密鑰時不需要密鑰的密碼

Enter same passphrase again:

# 确認密鑰的密碼,必須和上面的輸入相同

Your identification has been saved in /home/local_user/.ssh/id_dsa.

# 私鑰儲存資訊

Your public key has been saved in /home/local_user/.ssh/id_dsa.pub.

# 公鑰儲存資訊

The key fingerprint is:

ec:41:e8:08:38:0b:f8:1e:bc:92:98:32:fc:d7:69:7d ...

# 密鑰指紋

二.分發公鑰

為了使用密鑰,必須将公鑰分發到欲登入的遠端伺服器上,這裡遠端伺服器記為remote_host,欲登入的遠端使用者記為remote_user

1.copy公鑰到欲登入的遠端伺服器的遠端使用者的家目錄下,例如:

copy id_dsa.pub到remote_host:/home/remote_user/.ssh/

若目錄/home/remote_user/.ssh/不存在,請先建立之.

2.将copy來的公鑰檔案改名為authorized_keys

3.修改公鑰檔案的通路權限

chmod 644 authorized_keys

三.示例

目标:

從遠端伺服器remote_host:/home/remote_user/data/

傳送下列檔案到本地計算機的目前目錄: /home/local_user/data/:

20050201

20050202

20050203

20050204

20050205

方式1: 批模式

sftp提供了一個選項-b,用于集中存放sftp指令(該選項主要用于非互動模式的sftp).是以對于上面的目标,可以生成如下的指令檔案:

cd /home/remote_user/data/

lcd /home/local_user/data/

-get 20050201 .

-get 20050202 .

-get 20050203 .

-get 20050204 .

-get 20050205 .

quit

這裡存為: sftp_cmds.txt

說明: get指令前加一個"-"以防止其執行錯誤時sftp執行過程被終止.

以下為腳本示例:

#!/bin/sh

sftp -b ./sftp_cmds.txt remote_user@remote_host

方式二:

sftp remote_user@remote_host << EOF

EOF

方式三:用scp更簡單。