[ubuntu入门手册]-13-使用ssh实现文件安全互传

引言

本文介绍两种Ubuntu终端下安全传输文件的方式:scp和sftp,它们各有优点,并且都基于ssh。

文章目录

0×1.安装openssh-server

如果是A传输文件给B,或者A从B上下载文件到本地,只需要在B上安装openssh-server;如果是两端想实现互相传输和访问,那么A和B都要安装openssh-server。

						#1.下载安装openssh-server
						qing@qingsword.com:~$ sudo apt-get install openssh-server

						#2.如果想使用root用户登陆ssh或互传文件,需要更改ssh配置文件(建议非必要,不要开启root登陆)
						 qing@qingsword.com:~$ sudo vim /etc/ssh/sshd_config 
						 #找到"PermitRootLogin"默认是
						 PermitRootLogin without-password
						 #更改成
						 PermitRootLogin yes
						 #重启ssh服务即可用root登陆ssh(注意:ubuntu系列里面服务的名称是ssh不是sshd,请注意替换)
						 qing@qingsword.com:~$ sudo systemctl restart sshd
						
						#3.如果想改变ssh默认监听端口,在/etc/ssh/sshd_config文件中将port后面的端口改成另外的端口即可,但不要和现有端口冲突。

						#4.如果需要在重启后ssh自动跟随系统启动,可以使用下面的命令将ssh加入系统启动项(仅限于使用systemd启动的系统)
						qing@qingsword.com:~$ sudo systemctl enable sshd
					

0×2.使用scp传输文件

安装好openssh-server后,就可以直接使用scp传输文件了:

						#电脑A:192.168.1.100 用户名qing
						#电脑B:192.168.1.101 用户名sword
						#用户名就是我们登陆ubuntu系统时候的那个用户名称,我们必须知道用户对应的登陆密码才可以实现互传
						
						#1.A将当前目录下的file1文件传输到B家目录下的download文件夹中
						qing@qingsword.com:~$ scp file1 sword@192.168.1.101:~/download/
						sword@192.168.1.101's password: <-输入sword的密码

						#如果B更改了ssh端口号,使用-P参数添加更改后的端口号
						qing@qingsword.com:~$ scp -P 端口号 file1 sword@192.168.1.101:~/download/

						#2.A将当前目录下的test目录传输到B家目录中
						qing@qingsword.com:~$ scp  -r test/ sword@192.168.1.101:~

						#3.将B家目录下的file2下载到本地家目录中
						qing@qingsword.com:~$ scp sword@192.168.1.101:~/file2 ~

						#4.将B家目录下的test下载到本地家目录中并且重命名为test1
						qing@qingsword.com:~$ scp -r qingsword@192.168.1.101:~/test ~/test1
					

0×3.使用sftp传输文件

sftp的用法和scp差不多,只不过sftp会一直保持与服务器的连接,直到用户退出。

						#1.首次连接,会提示你是否接受sword机器上的key,输入yes
						qing@qingsword.com:~$ sftp sword@192.168.1.101
						The authenticity of host '192.168.1.101 (192.168.1.101)' can't be established.
						Are you sure you want to continue connecting (yes/no)? yes  <-输入yes

						#如果修改了ssh端口
						qing@qingsword.com:~$ sftp -P 端口号 sword@192.168.1.101

						#2.输入密码后就进入sftp提示符下,表示现在已经连接到sword中了,可以通过pwd查看当前是连接到sword的哪个目录,默认是家目录
						sftp> pwd
						Remote working directory: /home/sword
						
						#3.传输文件到sword
						sftp> put 本地文件路径 远程保存路径
						#例如传输本地当前目录下的testfile到远程目录下,改名为testfile1
						sftp> put testfile ./testfile1

						#可以通过ls查看远程目录文件,通过lls查看本地目录文件,更多命令请输入help查阅

						#4.传输本地目录test/到sword,可以在sword创建一个test目录,然后进入这个目录,再将本地的test下所有文件传输到这个目录中,如下
						sftp> mkdir test
						sftp> cd test/
						sftp> pwd
						Remote working directory: /home/sword/test
						sftp> put test/* .

						#但这样的传输方式如果遇到在test目录下还存在子目录的话,传输就会失败,提示要传输的目标不是文件,最好的方法是添加-r参数,如下
						sftp> put -r test/ .

						#5.从sword下载filetest文件到本地当前目录
						sftp> get filetest ./
						Fetching /home/sword/filetest to ./filetest

						#6.从sword下载目录到本地,最好的方法同样是在本地先建立一个同名文件夹,然后进入这个文件夹,之后再将远程对应文件夹中的文件全部复制到本地文件夹中
						sftp> lpwd
						Local working directory: /home/qing
						sftp> lmkdir test
						sftp> lcd test
						sftp> get test/* .

						#在sftp中对本地操作时需要在命令加上l前缀(local),比如lls就是显示本地目录内容,更多支持的命令请查阅help。
					

Ps:scp和sftp上传下载都会覆盖指定目录中同名的文件,所以请确保文件名没有重复再传输。