如何在shell指令碼里使用sftp批次傳送檔案
如何在shell指令碼里使用sftp批次傳送檔案
主要步驟如下:
1.為執行shell指令碼的本地使用者生成金鑰對
2.將其中的公鑰分發到sftp欲登入的遠端伺服器上
3.編寫並以上面的本地使用者執行shell指令碼
一.生成金鑰對
在shell指令碼中使用sftp時必須用到金鑰對(公鑰和私鑰).可使用下列方式生成(SSH 2.X版本),這裡本地使用者記為:local_user:
$ ssh-keygen –d
螢幕提示:
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
方式二:
#!/bin/sh
sftp remote_user@remote_host << EOF
cd /home/remote_user/data/
lcd /home/local_user/data/
-get 20050201 .
-get 20050202 .
-get 20050203 .
-get 20050204 .
-get 20050205 .
quit
EOF
注: 最後的 script中, get前 加"-" 會導致語法問題
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2222550/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- shell指令碼:批次傳送curl請求指令碼
- shell指令碼之批次清空檔案指令碼
- 如何在Shell指令碼中逐行讀取檔案指令碼
- 傳送kafka訊息的shell指令碼Kafka指令碼
- sftp 傳輸檔案FTP
- 批次解壓shell指令碼指令碼
- xshell 使用 sftp上傳下載檔案FTP
- Shell指令碼 | 抓取log檔案指令碼
- 簡單介紹Shell指令碼之檔案批次建立與修改的方法指令碼
- shell指令碼技巧—建立和清空檔案指令碼
- 用 Linux Shell 指令碼來監控磁碟使用情況併傳送郵件Linux指令碼
- [ Shell ] 通過 Shell 指令碼匯出 GDSII/OASIS 檔案指令碼
- 使用shell指令碼替換csv檔案中的資料指令碼
- 共享一個iptables的shell指令碼檔案指令碼
- shell 備份檔案指令碼+自動清理指令碼
- Shell指令碼逐行處理文字檔案技巧指令碼
- 在java中使用SFTP協議安全的傳輸檔案JavaFTP協議
- CURL 傳送檔案
- 使用SecureCRT的SFTP將檔案上傳到Liunx系統上SecurecrtFTP
- jftp通過sftp協議上傳檔案FTP協議
- 如何在Linux中使用Shell指令碼終止使用者會話?Linux指令碼會話
- 如何讓shell指令碼變成可執行檔案指令碼
- Linux伺服器上傳檔案傳送檔案Linux伺服器
- 使用Python批次傳送個性化郵件Python
- 批次網站DNS區域傳送漏洞檢測——bash shell實現網站DNS
- Linux系統配置檔案簡易shell備份指令碼Linux指令碼
- shell指令碼之刪除固定天數之前的檔案指令碼
- 使用js寫一個批次上傳檔案的元件JS元件
- C# Socket 檔案傳送傳輸C#
- Shell指令碼介紹與使用指令碼
- shell指令碼指令碼
- python3指令碼批次重新命名歌曲檔案Python指令碼
- go 呼叫 shell 指令碼 如何傳遞引數Go指令碼
- 批次非同步上傳aws圖片指令碼(python)非同步指令碼Python
- http不使用Form表單傳送檔案資料和非檔案資料(上傳篇)HTTPORM
- 自動批次實現linux機器ssh免密shell指令碼Linux指令碼
- 使用shell 指令碼備份資料指令碼
- 如何使用zx編寫shell指令碼指令碼