转眼间距离上一次发表文章已经足足一年了,上一篇文章发表在2018年的感恩节。
在这次的文章里,主要是讲述Linux系统比较常用跨主机传输文件的工具,
分别是ftp、sftp(expect)和scp三种。它们各自有各自的用处。
1、ftp工具只需在一端(源端或者目标端)配置ftp服务,就可以使用,一般传输较集中,量多而且总量大的文件,可以放后台传输,执行稳定??
2、sftp(expect)工具需要安装tcl与expect,可只在一端安装,一般传输较集中,量多而且总量大的文件,可以放后台传输,执行稳定;
3、一般主机间ssh的22端口开通,可以直接传输,一般传输文件量少操作简易,也可放后台,但总是执行命令的会话挂死,传输就终止。
下面让我们一起看看它们的使用方法。
一、ftp方式传输
1、安装与查看ftp服务:
[root@test12c1 ~]#vsftpd -v
vsftpd: version 3.0.2
[root@test12c1 ~]#
2、安装ftp服务:
yum -y install vsftpd
3、设置ftp匿名登录:
修改vsftpd.conf文件
vi etc/vsftpd/vsftpd.conf
把anonymous_enable=YES ,改为NO ,然后重启vsftpd
4、重启配置并查看ftp服务进程:
systemctl vsftpd restart
# 查看vsftpd服务的状态
systemctl status vsftpd.service
# 设置开机启动
systemctl enable vsftpd.service
#提示,我自己使用的是Linux 7.x以上的版本。
5、使用ftp传输文件:
[oracle@test12c1 soft]$ cat >getfiles.sh
#!/bin/sh
HOST='192.168.163.2'
USER='oracle'
PASSWD='oracle'
FTP_DIR='/soft'
FTP_TARGET_DIR='/soft'
echo " " >> ftp.log
echo " " >> ftp.log
echo "============== ftp begin ======================" >> ftp.log
echo ">>> Begin at `date` " >> ftp.log
echo "===============================================" >> ftp.log
echo " " >> ftp.log
ftp -v -n $HOST <<END_SCRIPT >> ftp.log
quote USER $USER
quote PASS $PASSWD
prompt
lcd $FTP_DIR
cd $FTP_TARGET_DIR
pwd
bin
mget p133*
quit
END_SCRIPT
echo " " >> ftp.log
echo "============== ftp end ======================" >> ftp.log
echo ">>> End at `date` " >> ftp.log
echo "=============================================" >> ftp.log
echo " " >> ftp.log
exit 0
#编辑以上sh脚本。
[oracle@test12c1 soft]$ ls -l get*
-rw-rw-r-- 1 oracle oracle 703 Dec 1 10:20 getfiles.sh
[oracle@test12c1 soft]$ nohup sh getfiles.sh >getfiles.log &
[oracle@test12c1 soft]$ more ftp.log
============== ftp begin ======================
>>> Begin at Sun Dec 1 10:20:43 PST 2019
===============================================
Connected to 192.168.163.2 (192.168.163.2).
220 (vsFTPd 3.0.2)
331 Please specify the password.
230 Login successful.
Interactive mode off.
Local directory now soft
250 Directory successfully changed.
257 "/soft"
200 Switching to Binary mode.
local: p13390677_112040_Linux-x86-64_1of7.zip remote: p13390677_112040_Linux-x86-64_1of7.zip
227 Entering Passive Mode (192,168,163,2,177,114).
150 Opening BINARY mode data connection for p13390677_112040_Linux-x86-64_1of7.zip (1395582860 bytes).
226 Transfer complete.
1395582860 bytes received in 38.2 secs (36509.92 Kbytes/sec)
local: p13390677_112040_Linux-x86-64_2of7.zip remote: p13390677_112040_Linux-x86-64_2of7.zip
227 Entering Passive Mode (192,168,163,2,255,6).
150 Opening BINARY mode data connection for p13390677_112040_Linux-x86-64_2of7.zip (1151304589 bytes).
226 Transfer complete.
1151304589 bytes received in 36.5 secs (31526.71 Kbytes/sec)
local: p13390677_112040_Linux-x86-64_3of7.zip remote: p13390677_112040_Linux-x86-64_3of7.zip
227 Entering Passive Mode (192,168,163,2,176,131).
150 Opening BINARY mode data connection for p13390677_112040_Linux-x86-64_3of7.zip (1205251894 bytes).
226 Transfer complete.
1205251894 bytes received in 53.5 secs (22516.44 Kbytes/sec)
221 Goodbye.
============== ftp end ======================
>>> End at Sun Dec 1 10:22:51 PST 2019
=============================================
[oracle@test12c1 soft]$
二、sftp方式传输
1、expect安装配置
expect依赖于tcl,而linux系统里一般不自带安装tcl,所以需要手动安装,
下载工具介质,地址如下:
下载:expect-5.43.0.tar和tcl8.4.11-src.tar
下载地址:https://pan.baidu.com/s/1kVyeLt9
提取密码:af9p
将expect和tcl的软件包下载放到/usr/local/src目录下
(1)解压tcl,进入tcl解压目录,然后进入unix目录进行编译安装:
[root@test12c1 src]# tar -zvxf tcl8.4.11-src.tar.gz
[root@test12c1 src]# cd tcl8.4.11/unix
[root@test12c1 unix]# ./configure
[root@test12c1 unix]# make && make install
(2)安装expect:
[root@test12c1 src]# tar -zvxf expect-5.43.0.tar.gz
[root@test12c1 src]# cd expect-5.43.0
[root@test12c1 expect-5.43.0]# ./configure --with-tclinclude=/usr/local/src/tcl8.4.11/generic --with-tclconfig=/usr/local/lib/
[root@test12c1 expect-5.43.0]# make && make install
(3)安装完成后进行测试:
[root@test12c1 ~]# expect
expect1.1>
expect1.1>
expect1.3> exit
[root@test12c1 expect-5.43]#
[root@test12c1 ~]# which expect
/usr/local/bin/expect
[root@test12c1 ~]#
2、使用sftp传输文件
[oracle@test12c1 soft]$ cat >getfile_sftp.sh
#/usr/local/bin/expect -f
set userna [lindex $argv 0]
set passwd [lindex $argv 1]
set ip [lindex $argv 2]
set dir [lindex $argv 3]
spawn sftp $userna@$ip
expect {
"(yes/no)?" {send "yes\r"; expect_continue}
"*assword:" {send "$passwd\r"}
}
set timeout -1
expect "sftp>"
send "cd $dir\r"
expect "sftp>"
send "get p133*\r"
expect "sftp>"
send "bye\r"
[oracle@test12c1 soft]$
[oracle@test12c1 soft]$ nohup usr/local/bin/expect getfile_sftp.sh oracle oracle 192.168.163.2 soft/ >getfile_sftp.log &
[1] 49222
[oracle@test12c1 soft]$ nohup: ignoring input and redirecting stderr to stdout
[oracle@test12c1 soft]$[1]+ Done nohup usr/local/bin/expect getfile_sftp.sh oracle oracle 192.168.163.2 soft/ > getfile_sftp.log
[oracle@test12c1 soft]$ ls -lrt
total 3664256
-rw-rw-r--. 1 oracle oracle 353 Dec 1 00:53 getfile_sftp.sh
-rw-r--r--. 1 oracle oracle 1395582860 Dec 1 00:55 p13390677_112040_Linux-x86-64_1of7.zip
-rw-r--r--. 1 oracle oracle 1151304589 Dec 1 00:56 p13390677_112040_Linux-x86-64_2of7.zip
-rw-r--r--. 1 oracle oracle 1205251894 Dec 1 00:57 p13390677_112040_Linux-x86-64_3of7.zip
-rw-rw-r--. 1 oracle oracle 45746 Dec 1 00:57 getfile_sftp.log
[oracle@test12c1 soft]$ cat getfile_sftp.log
spawn sftp oracle@192.168.163.2
oracle@192.168.163.2's password:
Connected to 192.168.163.2.
sftp> cd soft/
sftp> get p133*
Fetching soft/p13390677_112040_Linux-x86-64_1of7.zip to p13390677_112040_Linux-x86-64_1of7.zip
/soft/p13390677_112040_Linux-x86-64_1of7.zip 100% 1331MB 21.1MB/s 01:03
Fetching /soft/p13390677_112040_Linux-x86-64_2of7.zip to p13390677_112040_Linux-x86-64_2of7.zip
/soft/p13390677_112040_Linux-x86-64_2of7.zip 100% 1098MB 13.1MB/s 01:24
Fetching /soft/p13390677_112040_Linux-x86-64_3of7.zip to p13390677_112040_Linux-x86-64_3of7.zip
/soft/p13390677_112040_Linux-x86-64_3of7.zip 100% 1149MB 26.7MB/s 00:43
sftp> [oracle@test12c1 soft]$
#这里附上sftp传输过程的日志输出。
三、scp方式传输
1、scp传输文件
[oracle@susource soft]$ scp p133* 192.168.163.133:/soft
The authenticity of host '192.168.163.133 (192.168.163.133)' can't be established.
ECDSA key fingerprint is bb:1d:61:84:01:0e:08:85:7e:b1:c9:96:f2:1f:ed:55.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.163.133' (ECDSA) to the list of known hosts.
oracle@192.168.163.133's password:
p13390677_112040_Linux-x86-64_1of7.zip 7% 95MB 56.3MB/s 00:21 ETA^Z
[1]+ Stopped scp p133* 192.168.163.133:/soft
2、暂停传输作业
[oracle@susource soft]$Ctrl + z
3、后台挂起传输作业
[oracle@susource soft]$ bg
[1]+ scp p133* 192.168.163.133:/soft &
[oracle@susource soft]$
4、查看scp传输的作业或进程
[oracle@susource soft]$ ps -ef |grep scp
oracle 3512 3436 17 11:10 pts/2 00:00:06 scp p13390677_112040_Linux-x86-64_1of7.zip p13390677_112040_Linux-x86-64_2of7.zip p13390677_112040_Linux-x86-64_3of7.zip 192.168.163.133:/soft
oracle 3513 3512 10 11:10 pts/2 00:00:04 /usr/bin/ssh -x -oForwardAgent=no -oPermitLocalCommand=no -oClearAllForwardings=yes -- 192.168.163.133 scp -d -t /soft
oracle 3530 3436 0 11:11 pts/2 00:00:00 grep --color=auto scp
[oracle@susource soft]$ jobs
[1]+ Running scp p133* 192.168.163.133:/soft &
[oracle@susource soft]$
提示:scp虽然可以挂后台执行,但是只要执行scp命令的会话挂死,scp传输作业也会被终止。




