实验室里的机子主要装了两种Linux,Ubuntu和Fedora,平时大家传资料,都是用U盘拖来脱去,甚是不便,于是,今天就写一篇教程,教大家如何使用Linux自带的scp命令来实现文件传输。
1.首先要保证两个机子间能ping通。例如一个的ip地址是192.168.82.1(查看本机ip:$ ifconfig),用户名为citA,另一台机子的ip地址是192.168.82.2,用户名为citB。
在citA的终端中输入$ ping 192.168.82.2 ,一旦返回
PING 192.168.82.2 (192.168.82.2) 56(84) bytes of data.
From 192.168.82.1 icmp_seq=1 Destination Host Unreachable
From 192.168.82.1 icmp_seq=2 Destination Host Unreachable
....
说明网络连接有问题,请检查网线,网卡等设备。一旦返回
PING 192.168.82.2 (192.168.82.2) 56(84) bytes of data.
64 bytes from 192.168.82.2: icmp_req=1 ttl=64 time=0.229 ms
64 bytes from 192.168.82.2: icmp_req=2 ttl=64 time=0.215 ms
64 bytes from 192.168.82.2: icmp_req=3 ttl=64 time=0.224 ms
....
说明两机连通,可以进行下一步操作。
2.使用scp命令传文件。
例如将citA的/home/citA/Desktop/a文件传到citB的/home/citB/Desktop/里,有两种方法:
(1)进入citA的Desktop目录中
$ cd /home/citA/Desktop
然后执行scp命令
$ scp a citB@192.168.82.2:/home/citB/Desktop
格式为
$ scp 文件名 接受端用户名@接受端ip地址:接受端路径
(2)或者在任意目录下,输入发送端的完整路径
$ scp /home/citA/Desktop/a citB@192.168.82.2:/home/citB/Desktop
格式为
$ scp 发送端路径+文件名 接受端用户名@接受端ip地址:接受端路径
当然了,你要有对方用户的密码才可以。一旦是文件夹,使用scp -r即可。一旦想将当前目录下所有文件夹全部发送,scp -r *就可以了。
搞定。
接下来介绍下可能出现的错误及异常情况。
1.一旦向fedora系统的机子传送文件时出现
ssh: connect to host 192.168.82.15 port 22: No route to host lost connection
可能是由于fedora的系统默认关闭了传输文件的22端口导致的,大家用命令打开它,在接受端上输入:
$ su
输入密码,进入最高权限,然后开启22端口:
# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
此时,再次尝试传输命令,一旦依旧报错,还是进入接受端,在最高权限下,重启它的sshd服务,注意要输入完整路径名:
# /etc/init.d/sshd restart
此时再次尝试传输,应该会成功。
2.一旦出现 Permission denied,这个问题主要是权限问题。
(1)首先检查自己要发送的文件是否有自己可以执行的权限,使用
$ ls -l 文件名
查看,一旦权限不足,可以使用
$ chmod 777 文件名
来提升文件权限。
(2)可能是路径的权限问题
检查自己是否具有向接受端路径写的权限,例如,当处在普通权限时,一旦向接受端的 / 目录下写,就必定是Permission denie的。
3.对于 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
是由于先前已经连接过此接受端,本机中就会存储接受端的历史信息,结果再次连接时接受端的信息出现了变化,与本机中存储的历史信息不符,导致的错误,只要将本机中存储的历史信息删除即可。
按照报错信息提示,进入/home/cit/.ssh/
$ cd /home/cit/.ssh/
使用vi编辑器或gedit打开known_hosts
$ vi known_hosts
或
$ gedit known_hosts
全部删除里面的信息即可,记住不是删除这个文件,是打开文件,删除里面的信息。
至此,scp文件传输应该就可以搞定了。