scp是secure copy的简写, 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。
因为scp传输是加密的,可能会稍微影响一下速度。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。
因为scp是用于加密传输的,所以这里我们用两个虚拟机进行演示。
这里你可以选择在你原有虚拟机的基础上克隆一个新的虚拟机,如果你的计算机配置较高也可以选择创建一个新的完全独立的虚拟机。
我这里选择的是更不会占用内存的克隆的方式创建一个虚拟机。
具体操作如下图:
过程按它默认的选项就可以。
这里我选择是链接克隆。
之后选择你的克隆虚拟机名称和位置。
这样你就完成安装了。
为了使我们的文件可以远程传输,我们需要获取我们虚拟机的IP地址。
具体操作如下:(要先确保你的虚拟机已打开)
这里你虚拟器输入你的用户名,这里ssh的端口默认为22。选项不用填,然后连接。
这样我们会看见:
你就可以看到自己的IP地址了。
经我的实验,有两种安装ssh服务的命令可使用:
$ sudo apt install openssh-server
$ sduo apt-get install ssh
输入
$ sudo service ssh start
启动ssh服务。
// PS: 如果无法识别 SSH 服务, 命令前面须加 sudo,
// 一般安装完成后会自动启动 SSH 服务。
sudo service ssh start // 启动 SSH 服务
sudo service ssh stop // 停止 SSH 服务
sudo service ssh restart // 重启 SSH 服务
sudo service ssh status // 查询 SSH 服务状态
ps -A | grep "ssh" // 查询 SSH 服务进程
输入
$ ssh [email protected]
连接主机。
这里的用户名使用的是你当前虚拟机的用户名,IP地址的获取方法在上面已经提到了。
// 连接远程主机(默认 SSH 端口为 22), 连接上后需要输入用户的密码
ssh 用户名@IP
// 指定端口连接
ssh 用户名@IP -p <port>
在这里我还遇到了一些问题:
在开启ssh服务的时候出现了:
$ ssh: connect to host localhost port 22: Connection refused
显示连接被拒绝
这种情况下可能是你的ssh并没有安装或者启动。
你可以试试重新使用
$ apt-get install ssh openssh-server
重新安装。
然后你可以选择两种方法开启ssh服务。
$ /etc/init.d/ssh start
$ sudo service ssh start
查看进程
$ ps -e | grep sshd
出现了这个就显示ssh进程开启了。(我这里开启了多次,所以会有多个进程)
上传命令:
$ scp -r /本地文件路径 目标用户名@目标主机IP:/目标文件绝对路径 // 上传
接下来我们尝试着将一个文件上传到服务器上。
我们先在桌面创建两个文件夹
$ mkdir example_1
$ mkdir test_1
进入到example_1中,再创建一个test文件
$ touch test
然后我们尝试使用scp将这个文件上传到服务器中。
scp test [email protected]:/home/eilo/Desktop/test_1/
这样我们的test文件就被上传到了test_1这个文件夹里了。
同理,当我们有另一个用户的用户名和ip地址,就可以将文件上传给该用户了。
这里只展示过程。
在我操作的过程中,我还发现,如果你传输的地址是不存在的,那么第一次传输文件只会生成对应路径下的文件夹,而并不会把想要传输的文件传输过去。
我还尝试与我的舍友建立连接,结果显示是无法连接的,经过查找资料得知,只有在同一网络下ssh服务才能在私人之间建立连接,如果想要跨网络进行连接,就必须连接上公网才行。
下载命令:
$ scp -r 目标用户名@目标主机IP:/目标文件绝对路径 /本地保存路径 // 下载
关于scp的详细命令使用:
语法: scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
[-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1
[…] [[user@]host2:]file2
简易写法:
$scp [可选参数] file_source file_target
参数说明:
-1: 强制scp命令使用协议ssh1
-2: 强制scp命令使用协议ssh2
-4: 强制scp命令只使用IPv4寻址
-6: 强制scp命令只使用IPv6寻址
-B: 使用批处理模式(传输过程中不询问传输口令或短语)
-C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
-p:保留原文件的修改时间,访问时间和访问权限。
-q: 不显示传输进度条。
-r: 递归复制整个目录。
-v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
-c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
-F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
-i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
-l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
-o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
-P port:注意是大写的P, port是指定数据传输用到的端口号
-S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
NFS是基于UDP/IP协议的应用,其实现主要是采用远程过程调用RPC机制,RPC提供了一组与机器、操作系统以及低层传送协议无关的存取远程文件的操作。RPC采用了XDR的支持。XDR是一种与机器无关的数据描述编码的协议,他以独立与任意机器体系结构的格式对网上传送的数据进行编码和解码,支持在异构系统之间数据的传送。
安装NFS服务器端
$ sudo apt install nfs-kernel-server
安装NFS客户端
$ sudo apt install nfs-common
输入命令
$ sudo mkdir /nfs_test
创建一个共享文件夹。
$ sudo mkdir /mnt_test
创建一个挂载文件夹。
$ sudo chmod -R 777 /nfs_test
$ sudo chown -R nobody /nfs_test
这一步是为了防止在配置NFS的时候出现权限不够的问题。
输入
$ cd
$ sudo vim /etc/exports
来配置共享文件。
若需要把 “/nfs_test” 目录设置为 NFS 共享目录,请在该文件末尾添加下面的一行:
/nfs_test *(rw,sync,no_root_squash) # * 表示允许任何网段 IP 的系统访问该 NFS 目录
$ sudo /etc/init.d/nfs-kernel-server start
或者
$ sudo /etc/init.d/nfs-kernel-server restart
在 NFS 服务已经启动的情况下,如果修改了 “/etc/exports” 文件,需要重启 NFS 服务,以刷新 NFS 的共享目录。
输入
$ sudo mount -t nfs 192.168.75.130:/nfs_test /mnt_test -o nolock
192.168.75.130为我的本地IP地址。
/nfs_test为共享目录。
/mnt_test 为设备挂载目录.
如果指令运行没有出错,则 NFS 挂载成功,在主机的 /mnt_test 目录下应该可以看到 /nfs_test目录下的内容(可先在 nfs_test 目录下新建测试目录)
这里我展示了NFS传输文件的全过程。
可以看见,在第一次启动服务的时候,mnt_test目录下面是没有文件的。
之后我在nfs_test内新建了一个test_nfs文件。
然后再一次输入
$ sudo mount -t nfs 192.168.75.130:/nfs_test /mnt_test -o nolock
打开mnt_test会发现我们的test文件已经上传到这里了。
这就是一个简单的使用NFS进行本地文件的挂载的例子。
接下来是在两台虚拟机上通过NFS进行文件挂载的例子。
这里使用了两台虚拟机,两台虚拟机配置同上面SCP一样。
另一台虚拟机也必须先安装NFS服务才行。
这里安装过程省略。
同样,我在另一台虚拟机上也创建了一个mnt_test_n1文件夹作为挂载文件夹。
$ sudo mkdir /mnt_test
然后输入
$ sudo mount -t nfs 192.168.75.130:/nfs_test /mnt_test -o nolock
将mnt_test与主机共享文件夹挂载。
然后我反复尝试在nfs_test和mnt_test中创建和删除文件,下面是我尝试的过程。
之后我又尝试将虚拟机关闭,查看mnt_test发现里面的文件消失了。
和同学交流后得知,如果关闭虚拟机就会停止NFS服务,之前的挂载点就会消失,与之连接的文件夹内的文件也会消失。
你必须重新启用NFS服务,并重新挂载。
下面是过程。
TFTP是一个传输文件的简单协议,它基于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的。此协议设计的时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中有三种模式:netascii,这是8位的ASCII码形式,另一种是octet,这是8位源数据类型;最后一种mail已经不再支持,它将返回的数据直接返回给用户而不是保存为文件。
$ sudo apt install -y tftpd-hpa #远程服务器端
$ sudo apt install -y tftp-hpa #本地客户端
输入
sudo vim /etc/default/tftpd-hpa
$ sudo chmod -R 777 /srv/tftp
$ sudo chown -R nobody /srv/tftp
确保两台虚拟机都安装并启动了TFTP服务。
$ sudo service tftpd-hpa start #stop 关闭
tftp 192.168.75.130
使当前文件夹与远程共享文件夹连接,之后输入:
get test_tftp
便可以获取到我们在远程文件夹里上传的文件了。
ssh: connect to host localhost port 22: Connection refused引发的一系列问题解决的参考博客:
https://blog.csdn.net/sonetto/article/details/107640438
Linux 系统 SSH 和 SCP 服务器搭建与访问的参考博客:
https://blog.csdn.net/xietansheng/article/details/80044647?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164845350916782246431493%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164845350916782246431493&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-4-80044647.142v5pc_search_insert_es_download,143v6register&utm_term=scp%E6%9C%8D%E5%8A%A1%E5%99%A8&spm=1018.2226.3001.4187
scp远程文件传输命令的参考博客:
https://blog.csdn.net/qq_42263796/article/details/116590491?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164842896816782184654221%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164842896816782184654221&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-3-116590491.142v5pc_search_insert_es_download,143v6register&utm_term=scp&spm=1018.2226.3001.4187
NFS服务器搭建与配置参考博客:
https://blog.csdn.net/qq_38265137/article/details/83146421?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164845969216782092966356%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164845969216782092966356&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-83146421.142v5pc_search_insert_es_download,143v6register&utm_term=nfs&spm=1018.2226.3001.4187
TFTP传输方法的参考博客:
https://blog.csdn.net/wgypaul/article/details/88692565?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164847827616780271516306%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164847827616780271516306&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-4-88692565.142v5pc_search_insert_es_download,143v6register&utm_term=tftp&spm=1018.2226.3001.4187