linux

[color=green]
使用Shell脚本来实现FTP的自动上传下载
FTP自动登录批量下载文件[/color]。

[color=olive]用expect编写一个ftp.sh脚本内容如下[/color]#vi ftp.sh
set localpath "/home/test" #设置本地路径
set remotepath "/home/data" #设置远程路径

set timeout 6000
spawn ftp [lindex $argv 0]
expect "Name (*):"
send "admin\r"
expect "Password:"
send "admin\r"
expect "ftp>"
send "binary\r"
expect "ftp>"
send "hash\r"
expect "ftp>"
send "lcd $localpath\r"
expect "ftp>"
send "cd $remotepath\r"
expect "ftp>"
send "prompt\r"
send "Interactive mode on\r"
expect "ftp>"
send "passive\r"
send "Passive mode off\r"
expect "ftp>"
send "mget *\r"
expect "* Transfer complete."
send "exit\r"

执行方法:expect ftp.sh 服务器ip地址 文件名称
(expect ftp.sh 192.168.0.1 )

说明:
bin :文件以二进制传输
lcd /backup :进入本地目录/backup
cd /pub :进入远程主机目录/pub
passive:进入被动传输方式。
prompt:设置多个文件传输时的交互提示
mget :将远程主机目录下的所有文件传输至/backup目录下
mput :将/backup目录下的所有文件传输至远程主机


[color=olive]普通方式:[/color]
编写一个ftp.sh脚本内容如下
#!/bin/bash
ftp -n<<!
open 127.0.01
user admin password
binary
cd /home/data
lcd /home/test
prompt
mget *.zip
close
bye
!

说明:
open 连接远程 ftp 站点
binary 设置文件传输方式为二进制模式
hash 每次传输完数据缓冲区中的数据后就显示一个#号
hash 每次传输完数据缓冲区中的数据后就显示一个#号
get mget 从远程机传送指定文件到本地机 get 命令的一般格式为 get 文件名
mget 命令一次获取多个远程文件mget 命令的一般格式为 mget 文件名列表
使用用空格分隔的或带通配符的文件名列表来指定要获取的文件,对其中的每个文件都要求用户确认是否传送。
put (mput) 从本地机传送指定文件到远程机, put 命令的一般格式为:put 文件名
mput 命令一次发送多个本地文件mput 命令的一般格式为:mput 文件名列表
使用用空格分隔的或带通配符的文件名列表来指定要发送的文件,对其中的每个文件都要求用户确认是否发送。

[color=olive]scp拷贝文件[/color]

#!/usr/bin/expect
set timeout 10
set host [lindex $argv 0] //第1个参数,其它2,3,4参数类似
set username [lindex $argv 1]
set password [lindex $argv 2]
set src_file [lindex $argv 3]
set dest_file [lindex $argv 4]
spawn scp $src_file $username@$host:$dest_file
expect {
"(yes/no)?"
{
send "yes\n"
expect "*assword:" { send "$password\n"}
}
"*assword:"
{
send "$password\n"
}
}
expect "100%"
expect eof

使用方法
./expect_scp 192.168.75.130 root 123456 /root/src_file /root/dest_file
以上的命令执行后,将把本地/root目录下的src_file文件拷贝到用户名为root,密码为123456的主机192.168.75.130中的/root下,同时还将这个源文件重命名为dest_file

问题:
FTP服务的两种工作模式:
1.port方式(主动模式), 连接过程:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时, 客户端在命令链路上用PORT命令告诉服务器:“我打开了***X端口,你过来连接我”。于是服务器从20端口向客户端的***X端口发送连接请求,建立一条数据链路来传送数据。
2.pasv方式 ( 被动模式 ), 连接过程:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时, 服务器在命令链路上用PASV命令告诉客户端:“我打开了***X端口,你过来连接我”。于是客户端向服务器的***X端口发送连接请求,建立一条数据链 路来传送数据。

由于服务器上的FTP进行TCP/IP筛选,仅允许特定的端口可以被客户端连接,所以无法使用PASV方式。找到了原因,解决办法也很简单,只需要关闭客户端的PASV方式,强制其用PORT方式访问服务器即可。
客户端登录FTP服务器后,用passive命令关闭客户端的PASV方式,如下:
代码如下
ftp> passive
Passive mode off.
再次执行该命令就可以启用PASV模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值