脚本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_hos
t,欲登录的远程用户记为remote_user
1.公钥到欲登录的远程服务器的远程用户的家目录下,例如:
id_dsa.pub到remote_host:/home/remote_user/.ssh/
若目录/home/remote_user/.ssh/不存在,请先创建之.
2.将来的公钥文件改名为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
⑵ 浣跨敤sftp杩涜屾枃浠朵紶杈
SFTP鏄疭SH File Transfer Protocol镄勭缉鍐欙纴瀹夊叏鏂囦欢浼犻佸岗璁銆係FTP涓峄TP链夌潃鍑犱箮涓镙风殑璇娉曞拰锷熻兘銆係FTP涓篠SH镄勫叾涓涓閮ㄥ垎锛屾槸涓绉崭紶杈撴。妗堣呖 Blogger 浼烘湇鍣镄勫畨鍏ㄦ柟寮忋傚叾瀹炲湪SSH杞浠跺寘涓锛屽凡缁忓寘钖浜嗕竴涓鍙浣沦FTP镄勫畨鍏ㄦ枃浠朵俊鎭浼犺緭瀛愮郴缁燂纴SFTP链韬娌℃湁鍗旷嫭镄瀹堟姢杩涚▼锛屽畠蹇呴’浣跨敤sshd瀹堟姢杩涚▼(绔鍙e彿榛樿ゆ槸22)𨱒ュ畬鎴愮浉搴旂殑杩炴帴鍜岀瓟澶嶆搷浣滐纴镓浠ヤ粠镆愮嶆剰涔変笂𨱒ヨ达纴SFTP骞朵笉镀忎竴涓链嶅姟鍣ㄧ▼搴忥纴钥屾洿镀忔槸涓涓瀹㈡埛绔绋嫔簭銆
SFTP涓峄TP宸鍒
鍙浣跨敤SFTP浼犺緭鏂囦欢锛屼笉鑳戒娇鐢╯sh锏诲綍绯荤粺
鍒涘缓sftp鐢ㄦ埛缁
鍒涘缓sftp鐢ㄦ埛
灏咰hrootDirectory鐩褰曡剧疆涓/home锛堟墍链夋潈蹇呴’涓簉oot锛夛纴铹跺悗 ForceCommand 浣跨敤-d 阃夐”灏嗙敤鎴风殑涓荤洰褰曟寚瀹氢负璧峰嬬洰褰
褰揿墠/home鐩褰
缂栬緫/etc/ssh/sshd_config鏂囦欢
浣跨敤SFTP瀹㈡埛绔锛屼笂浼犳枃浠
镆ョ湅鐢ㄦ埛home鐩褰
宓屽椾富鐩褰
鍒涘缓鐩褰曞苟璁剧疆𨱒冮檺
镆ョ湅褰揿墠镄勭洰褰旷粨鏋
淇鏀/etc/ssh/sshd_config鏂囦欢
浣跨敤SFTP瀹㈡埛绔涓娄紶鏂囦欢
镆ョ湅涓娄紶镄勬枃浠朵綅缃
楠岃瘉
浠10.10.0.1链哄櫒锏诲綍
10.10.0.1链哄櫒鑳界湅鍒版墍链夌殑鐩褰
浠庡叾浠栦富链虹橱褰
鍏朵粬涓绘満鍙鑳界湅鍒伴檺瀹氱殑鐩褰
灞炰簬sftp-only鐢ㄦ埛缁勶纴浣嗘槸涓嶉檺鍒秙sh鍙妔ftp
鍒涘缓鐢ㄦ埛
淇鏀归厤缃
楠岃瘉
ssh锏诲綍楠岃瘉
淇鏀箂shd閰岖疆
淇鏀 /etc/rsyslog.conf锛屽湪链钖庢坊锷
SFTP 锻戒护
⑶ 鍦 linux 涓浣跨敤 sFTP 涓娄紶鎴栦笅杞芥枃浠跺す
sFTP锛埚畨鍏ㄦ枃浠朵紶杈撶▼搴忥级鏄涓绉嶅畨鍏ㄧ殑浜や簰寮忔枃浠朵紶杈撶▼搴忥纴鍏跺伐浣沧柟寮忎笌 FTP锛堟枃浠朵紶杈揿岗璁锛夌被浼笺 铹惰岋纴sFTP 姣 FTP 镟村畨鍏锛涘畠阃氲繃锷犲瘑 SSH 浼犺緭澶勭悊镓链夋搷浣滐纴鍦ㄦ湰鏂囦腑锛屾垜浠灏嗗悜浣犲𪾢绀哄备綍浣跨敤 sFTP 涓娄紶/涓嬭浇鏁翠釜鐩褰曪纸鍖呮嫭鍏跺瓙鐩褰曞拰瀛愭枃浠讹级锛屽傚筁inux绯荤粺涓嶅お镡熸倝镄勮瘽鍙浠ュ弬钥冦奓iux灏辫ヨ繖涔埚︺嬭繖链涔︺
濡备綍鍦 Linux 涓浣跨敤 sFTP 浼犺緭鏂囦欢/鏂囦欢澶
榛樿ゆ儏鍐典笅锛孲FTP 鍗忚閲囩敤鍜 SSH 浼犺緭鍗忚涓镙风殑鏂瑰纺寤虹珛鍒拌繙绋嬫湇锷″櫒镄勫畨鍏ㄨ繛鎺ャ傝槠铹讹纴鐢ㄦ埛楠岃瘉浣跨敤绫讳技浜 SSH 榛樿よ剧疆镄勫瘑镰佹柟寮忥纴浣嗘槸锛屽缓璁鍒涘缓鍜屼娇鐢 SSH 镞犲瘑镰佺橱褰曪纴浠ョ亩鍖栧拰镟村畨鍏ㄥ湴杩炴帴鍒拌繙绋嬩富链恒 瑕佽繛鎺ュ埌杩灭▼ sftp 链嶅姟鍣锛屽备笅寤虹珛涓涓瀹夊叏 SSH 杩炴帴骞跺垱寤 SFTP 浼氲瘽锛 $ sftp [email protected] 锏诲綍鍒拌繙绋嬩富链哄悗锛屼綘鍙浠ュ备笅杩愯屼氦浜掑纺镄 sFTP 锻戒护 sftp ls #list directory sftp pwd #print working directory on remote host sftp lpwd #print working directory on local host sftp mkdir uploads #create a new directory
瑕佸皢鏁翠釜鐩褰曚笂浼犲埌杩灭▼ Linux 涓绘満涓锛岃蜂娇鐢╬ut锻戒护銆备絾鏄锛屽傛灉鐩褰曞悕绉颁笉瀛桦湪浜庤繙绋嬩富链轰笂镄勫伐浣灭洰褰曚腑锛屼綘灏嗘敹鍒伴敊璇锛屽备笅闱㈢殑灞忓箷鎴锲炬墍绀恒 锲犳わ纴棣栧厛鍦ㄨ繙绋嬩富链轰笂鍒涘缓涓涓鍏锋湁鐩稿悓钖岖О镄勭洰褰曪纴铹跺悗浠庢湰鍦颁富链轰笂浼犲畠锛-r鍙傛暟鍏佽告嫹璐濆瓙鐩褰曞拰瀛愭枃浠讹细 sftp put -r Tecmint.com-articles sftp mkdir Tecmint.com-articles sftp put -r Tecmint.com-articles
瑕佷缭鐣欎慨鏀规椂闂淬佽块梾镞堕棿浠ュ强琚浼犺緭镄勬枃浠剁殑妯″纺锛岃蜂娇鐢-p镙囧织銆 sftp put -pr Tecmint.com-articles
濡备綍浣跨敤 sFTP 涓嬭浇鏂囦欢澶
瑕佷粠杩灭▼ Linux 涓绘満涓嬭浇鏁翠釜 fstools-0.0 鏂囦欢澶瑰埌链链轰腑锛屽备笅镓绀轰娇鐢 get 锻戒护甯︿笂-r镙囧织锛 sftp get -r fstools-0.0
濡傛灉鏂囦欢澶瑰凡缁忎笅杞藉畬鎴愪简锛屾帴镌镆ョ湅链链虹殑宸ヤ綔鐩褰曘 瑕侀鍑 sFTP shell锛岃緭鍏ワ细 sftp bye鎴栬却ftp exit 璇锋敞镒忥纴涓轰简阒叉㈢敤鎴疯块梾杩灭▼涓绘満涓婄殑鏁翠釜鏂囦欢绯荤粺锛屽嚭浜庡畨鍏ㄥ师锲狅纴浣犲彲浠ヤ娇鐢 chroot Jail灏 sFTP 鐢ㄦ埛闄愬埗鍒板叾涓荤洰褰曚腑銆 灏辨槸杩欐牱浜嗭紒鍦ㄦ湰鏂囦腑锛屾垜浠钖戜綘灞旷ず浜嗗备綍浣跨敤 sFTP 涓娄紶/涓嬭浇鏁翠釜鐩褰曘
⑷ linux下使用ftp怎么使用命令上传文件
在 Linux 系统提示符 $ 下,使用 ftp 命令,如下所示:
$ftp a.b.c.d <cr> (其中:a.b.c.d 为假设的一个对方的 FTP 服务器的 IP 地址)
如果是对方的 FTP 服务器允许别人进行匿名访问的话,那么用户名就是:anonymous,密码一般为空。否则的话,就需要输入对方提前事先提供给你的用户名和密码才能够进行文件传输。
使用约定好的用户名和密码登录到对方的 FTP 服务器之后,你就可以使用 put(传输单个文件)、或者 mput(传输多个文件)、get(从对方的FTP服务器上获取单个文件)、mget(从对方的FTP服务器上获取多个文件)了。当然了,一般 FTP 服务器的系统管理员都会给你一个 /pub 子目录,供所有用户使用。所以一般来说,即使使用账号登录 FTP 服务器之后,第一个命令就是: cd /pub ,转入公共子目录。