Linux系统之间的文件共享
1 scp命令
1. 需要输入密码:
$ cd cd /home/tony/.ssh/
$ scp id_rsa.pub root@172.17.12.57:/root/.ssh/authorized_keys
(然后输入172.17.12.57那台机器下的root密码,便可以传输文件id_rsa.pub
到,远程机器/root/.ssh/下,并改名为authorized_keys)
2. 不需要输入密码:
***不需要输入密码,就需要在两台机器之间建立信任关系:把本地主机用户的ssh
公匙文件复制到远程主机用户的~/.ssh/authorized_keys***
$ ssh-keygen
(一路回车下去,然后会在/home/tony/.ssh/目录下生成id_rsa和id_rsa.pub
两个文件,然后将id_rsa.pub文件传输到远程机。)
$ scp /home/tony/.ssh/id_rsa.pub root@172.17.12.57:/root/.ssh/
(实现了将id_rsa.pub传输到远程机器的/root/.ssh/目录下)
$ ssh root@172.17.12.57
(输入密码后,便可以通过ssh登录到远程机器,并且用root用户登录,这里如果直
接输入ssh 172.17.12.57登录,是用默认的tony用户登录的,原来是不需要
putty软件的啊,原来telnet和ssh是一样啊)
# cd .ssh
# mv id_rsa.pub authorized_keys
(这条命令执行过后,在exit出来后,会发现ssh root@172.17.12.57不再需要
密码了,从此scp的操作也不再需要密码了,原来scp就是ssh copy 的简写啊,
乱说的,没经过考证)
***疑问:不知道为什么,我用ssh-keygen -f 生成对应的文件,复制过去却不管
用***
3. 多台机器拥有一台机器的认证
基本操作同上类似,但是进入到远程主机的.ssh/目录下有两种可供选择的:
a. # cat id_rsa.pub >> authorized_keys
(显示的,这是一种追加形式,可以满足要求)
b. # mv id_rsa.pub authorized_keys2
(这个不错啊,笔者本人也是蛮喜欢这种方式的)
4. scp -p
scp -p 这个操作还是蛮有用的,可以保持文件属性不变。
$ scp -p root@172.17.12.57:/root/scrun.log .
(复制了远程机器上的scrun.log到当前目录下".",并且文件属性没有改变哦,
创建时间之类的都没改变啊)
5. scp -r
scp -r 这个r选项大家应该是熟悉的吧,不熟悉,自己骂自己一直在干嘛吧,r显示是
recursion即递归的意思啊,cp操作中都带的,想必也是很容易猜测r在这里是什
么意思吧,是可以传递文件夹(夹带了文件的传输哦)
$ scp -r SVN/ root@172.17.12.57:/root/
(OK, 传输成功了)
2 ftp命令
2.1 FTP介绍
FTP(文件传输协议)是用于与远程网络之间传输文件的标准网络协议。 基于C/S结构。
数据传输格式:二进制(默认)和文本。
双通道协议:命令和数据连接。
两种模式(从服务器角度):
-
主动(PORT style):服务器主动连接
命令(控制)端口: 客户端:随机port ---> 服务器:21/tcp
数据端口: 客户端:随机port <--- 服务器:20/tcp
-
被动(PASV style):客户端主动连接
命令(控制)端口: 客户端:随机port ---> 服务器:21/tcp
数据端口: 客户端:随机port ---> 服务器:随机port /tcp
2.2.1 实验一、将服务端的文件拷贝到本地
实验内容:
客户端IP为192.168.72.10,服务端IP为192.168.72.129。
需要将服务端中的 /f1.txt 文件拷贝到客户端。
实验思路:
1、服务端,安装 vsftpd 软件包。
2、服务端,启动 vsftpd 服务,检查21端口是否开启。
并将 /f1.txt 文件复制到/var/ftp 目录下。(/var/ftp 是程序用户ftp的家目录)
3、客户端,安装ftp工具。
4、客户端,使用 ftp 命令从服务端中将f1.txt拷贝到本地。
![](https://img2022.cnblogs.com/blog/2964616/202210/2964616-20221015110626749-859095310.png)
步骤2. 服务端安装vsftpd软件包。安装后系统会自动创建程序用户ftp,家目录为/var/ftp。
![](https://img2022.cnblogs.com/blog/2964616/202210/2964616-20221015110648972-513687209.png)
![](https://img2022.cnblogs.com/blog/2964616/202210/2964616-20221015110733569-520351837.png)
步骤3. 启动vsftpd服务,确认21端口已开启。并将 /f1.txt 文件复制到/var/ftp 目录下。
![](https://img2022.cnblogs.com/blog/2964616/202210/2964616-20221015110811598-657665420.png)
步骤4. 客户端,安装 ftp 程序
![](https://img2022.cnblogs.com/blog/2964616/202210/2964616-20221015110854796-1079572501.png)
步骤5. 客户端,使用 ftp 命令从服务端中将f1.txt拷贝到本地。
![](https://img2022.cnblogs.com/blog/2964616/202210/2964616-20221015110927707-1200631801.png)
2.3 ftp总结
- 一定要关闭防火墙和selinux。
- 使用get从服务端下载文件时,用户ftp对该文件必须拥有r权限(即读取权限),否则无法下载。例如/etc/passswd 文件,普通用户没有读取权限,无法下载该文件。
- get和put 不支持对目录文件进行下载和上传,必须先使用tar命令将目录进行归档压缩,之后才能下载或上传。
- 用户ftp对/var/ftp目录,不能拥有w权限,否则ftp用户不能登录访问。
- ftp用户在/var/ftp/pub目录下上传文件时,必须对pub目录拥有wx权限(即写入和执行权限),否则上传文件会提示失败,不支持创建文件,因为没有写入权限。
- put 上传文件时,不支持绝对路径,想要上传的文件必须在客户端的当前目录内。 例如当前是在/root目录下使用ftp连接服务端,想要上传/tmp/file01文件,必须先将file01复制到/root目录下,之后使用“put file01”或“put ./file01”命令删上传,不支持“put /tmp/file01"这种格式