用ftp在个人电脑和服务器之间进行文件传输

版权声明:如需转载或引用,请注明出处。 https://blog.csdn.net/weixin_39278265/article/details/86524646

前言

在此记录:
1)我是怎么在Ubuntu服务器和自己的ubutu个人电脑上实现文件传输的;
2)我是怎么在Ubuntu服务器和自己的windows个人电脑上实现文件传输的;
3)怎么远程控制(访问、操作)Ubuntu个人电脑;
4)寻找给Ubuntu服务器安装GUI界面的可行性。

Motivation(写作动机)

大概是从星期一开始,到现在(星期四 2019年01月16日),我就已经在研究这些问题了,确实挺费时间的,1) 自己不太熟悉ftp这些传输协议,也不是非常熟悉Ubuntu用户组,权限这些内容;2) 而且网上有的解决方案一直不靠谱,自己试了之后也没用,毕竟具体问题具体分析,一个解决方案不一定适用于所有的机器(也有可能是给出解决方案的人当时写的不够详细)。

所以只能自己去研究,然后解决问题。
故在此记录。

1 在Ubuntu服务器和自己的ubutu个人电脑上实现文件传输

1.0 说明

我的Ubuntu服务器 是在阿里云买的学生服务器(选择的系统是Ubuntu 16.04)。

我在这上面实际上花了很多时间,这里描述下大致过程。
一开始, 我只知道要在Ubuntu服务器和自己的Ubuntu个人电脑上实现文件传输,可以用ftp。所以我进行了ftp的各种安装操作(这里问题特别多);
后来, 我发现windows上有xftp图形化工具,所以我去找Ubuntu上有没有类似工具,参考[1]找到了 default file manager (Nautilus)(即Ubuntu系统自带的文件传输工具)、FireFTP - a firefox extension(火狐浏览器的一个FTP传输插件)、gftp、Filezilla。最后在[1]的安利下选择了Filezilla。
然后 就可以互相传输文件了。

1.1 先给Ubuntu服务器设置一个有sudo权限的非root用户

根据[7]的指导,前提条件就是要在服务器上创建一个有sudo权限的非root用户。
具体操作 ([8] 中的指导非常详细):

## 在自己个人电脑上打开一个终端
ssh root@your_server_ip   # your_server_ip 是你的服务器的公网ip地址
adduser daletest # 在服务器上新建一个用户 daletest
usermod -aG sudo daletest #赋予daletes这个非root用户以sudo权限

## 重新在自己个人电脑上打开一个新的终端
ssh-keygen  #产生公私钥
ssh-copy-id daletest@your_server_ip #复制公钥到服务器

## 回到之前ssh已经连接的服务器终端上
mkdir /home/deheng/daletest # 在root下为daletest用户创建一个文件夹
usermod -md /home/deheng/daletest daletest #把这个文件夹设置为daletest的起始目录
cd daletest/
ll  # 两个小L,就可以看到目录下有.ssh/文件夹,这里存着公钥
sudo nano /etc/ssh/sshd_config #为了提高安全等级,只允许使用ssh秘钥的人登录,现在修改这个文件,来禁用密码登录验证的操作。 把这一行PasswordAuthentication yes改成PasswordAuthentication no就可以了。

## 现在,重新在自己个人电脑上打开一个新的终端
ssh daletest@your_server_ip #这时候不输入密码就可以直接进入服务器
#此外,我尝试了ssh root@your_server_ip,但是无法连接,原因是:Permission denied (publickey).
#这就是效果:只能用有公钥的服务器账户(即daletest)登录。

Q: your_server_ip是什么ip地址?
A: 服务器的ip地址有两个:公网ip和私网ip。私网ip就是平时在terminal中输入的:ifconfig查出来的,如下:
在这里插入图片描述
但是这并不能用来ssh连接。所以your_server_ip对应的是服务器的公网ip。至于怎么查找自己的公网ip,参考 [9],即输入:curl ifconfig.me或者curl cip.cc确实优秀。


Q: usermod怎么用?
A: 参考[10],非常详细,我用的比较多的命令是:usermod -aG sudo my_user_name 这个是赋予root权限(可以自由的mkdir之类的)。
注意:如果只是adduser,比如adduser daletes2,但是没有给予root权限,那么su - daletest2之后,连mkdir,或者是sudo makdir操作,都是没用的(permission denied)。
usermod -md /home/path/xxx my_user_name 是用来修改用户的默认目录的。

Q: 如何更改root密码呢?
A: 用root登录,输入passwd,即可设置密码。也可以使用sudo passwd root [11]


Q: nano怎么用?
A: 看了一下教程[12],感觉比vim容易上手些。我常用的命令是:

选择文字:按住鼠标左键拖到。
复制一整行:Alt+6
剪贴一整行:Ctrl+K
粘贴:Ctrl+U
如果需要复制/剪贴多行或者一行中的一部分,先将光标移动到需要复制/剪贴的文本的开头,按Ctrl+6(或者Alt+A)做标记,然后移动光标到 待复制/剪贴的文本末尾。这时选定的文本会反白,用Alt+6来复制,Ctrl+K来剪贴。若在选择文本过程中要取消,只需要再按一次Ctrl+6。
按Ctrl+W,然后输入你要搜索的关键字,回车确定。这将会定位到第一个匹配的文本,接着可以用Alt+W来定位到下一个匹配的文本。

翻页 用Ctrl+Y到上一页,Ctrl+V到下一页

保存 使用Ctrl+O来保存所做的修改

退出 按Ctrl+X


Q: ssh连接怎么退出(不直接关闭terminal)?
A: Ctrl+D 或者 输入logout 即可。[13]

1.2 在服务器和个人电脑上安装ftp

在我的Ubuntu个人电脑的terminal中输入:

sudo apt-get update
sudo apt-get install vsftpd #安装vsftpd

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig   # 备份配置文件 [7]
sudo gedit /etc/vsftpd.conf #修改其配置文件

在修改配置文件/etc/vsftpd.conf时,在文件末尾添加如下行:

userlist_deny=NO
userlist_enable=YES #userlist中的用户被允许登录
userlist_file=/etc/allowed_users #userlist的地址
seccomp_sandbox=NO
local_root=/home/deheng/ftpuser #默认ftp下载目录
local_enable=YES #允许ftp localhost 这样的操作,如果设置为NO,就表示不允许。
write_enable=YES
utf8_filesystem=YES #使用utf8

然后可以修改/etc/allowed_users 文件,给里面添加允许访问的用户(一行一个)。
然后开启ftp:sudo service vsftpd restart

同理,在Ubuntu服务器上进行类似操作:

sudo apt-get update
sudo apt-get install vsftpd #安装vsftpd

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig   # 备份配置文件 [7]
sudo nano /etc/vsftpd.conf #修改其配置文件

在修改/etc/vsftpd.conf的时候,我只添加:

local_enable=YES #允许ftp localhost 这样的操作,如果设置为NO,就表示不允许。
write_enable=YES
userlist_enable=YES #userlist中的用户被允许登录
userlist_file=/etc/allowed_users #userlist的地址
seccomp_sandbox=NO
utf8_filesystem=YES #使用utf8

然后开启ftp:sudo service vsftpd restart


Q: 为什么要安装vsftpd呢?
A: 参考[5],[6],vsftpd全称:Very Secure FTP Daemon。
其官网主页号称:Probably the most secure and fastest FTP server for UNIX-like systems. ,其安全性和性能应该都是一流的,可以说很厉害了。


Q: vsftpd的相关指令
A: sudo service vsftpd restart 重启(这是我常用的指令)
sudo service vsftpd start 开启
sudo service vsftpd stop 终止

1.3 在Ubuntu个人电脑上安装filezilla

filezilla是Ubuntu下一个非常方便的文件传输图形化工具,用户界面非常友好 [1] 。

在自己的ubutnu个人电脑上安装filezilla [14]:

sudo apt-get update
sudo apt-get install filezilla

然后左上角搜索“filezilla”,点击图标,就可以直接打开:
在这里插入图片描述
在这里插入图片描述在host输入服务器的公网ip,然后输入对应的用户名和密码(我的是用户名是daletest),点击Quickconnect即可。

但是!出现问题:

在这里插入图片描述
非常懵,开始想前面是不是哪里设置有问题,我先把服务器和自己电脑上的vsftpd都restart了一遍,没用。然后各种搜索:filezilla Error: Connection closed by server
答案非常复杂。
这时候我中途出去休息了下。。。
然后回来,一看,把port端口信息填上:22.
然后就显示连接成功了。(因为我偶然看到filezilla提示的错误信息前面有一行表示:Status: Connecting to xxx:21… 然后我就在想是不是21号端口的原因,果然。我改成22就好了。
这样的debug感觉真的有很大运气成分。当然也和我之前失败次数很多有关,通过失败,我还是积累了很多经验,所以能猜到是端口的问题,不然根本“猜不到”。

注意:由于我之前的公钥设置,我只能以daletest身份登录服务器,如果以其他用户登录,会报错:

Error: Disconnected: No supported authentication methods available (server sent: publickey)
Error: Could not connect to server

1.4 小结

到目前为止,我们就可以自由的在自己的Ubuntu个人电脑和服务器之间上传文件了。

讲道理,感觉这个还挺难的。第一次接触,需要了解很多新的知识,不过好在最后还是学会了。
虽然花了四天(感觉还是有点慢,可能也和自己没有整天都学习有关),但是我感觉确实是个逐渐理解、知识积累的过程。你似懂非懂,那么就算误打误撞成功了也不好;所以脚踏实地,好好理解最为重要。主要是,只要自己在往这方向努力,总能学到点什么。(就和发论文是一个道理。对领域工作的理解也是要经理一个这样的过程)


未完待续


参考文献

注:其实我看的参考文献远不止这么些,感觉真正看的文献有现在列出来的3倍之多。
但是有些没必要列出来,所以就选择性的删除了。

[1] FTP client with a good GUI? https://unix.stackexchange.com/questions/5471/ftp-client-with-a-good-gui

[2] 怎样用远程桌面和ftp拷贝阿里云服务器数据到本地? https://yq.aliyun.com/ask/52762?spm=5176.10695662.1996646101.searchclickresult.747bd8a8S1Kr35

[3] [求助]给服务器上传文件有什么工具? https://bbs.aliyun.com/read/258110.html?spm=5176.10695662.1996646101.searchclickresult.734260b9FjlVlu

[4] Ubuntu Linux 搭建一个简单的ftp服务器,用于上传和下载文件 https://blog.csdn.net/zhoushenghuang/article/details/83212545

文献[2-4]是我一开始查的方案 ,其实我觉得参考文献[2-4]都较为模糊,是从阿里云社区或者博客中搜索来的,我没有很明白这里面说的一些操作,所以前期也走了很大弯路。

[5] vsftpd官网主页 https://security.appspot.com/vsftpd.html

[6] VSFTPD Installation & Setup on Ubuntu https://www.instructables.com/id/VSFTPD-Installation-Setup-on-Ubuntu/

[7] How To Set Up vsftpd for a User’s Directory on Ubuntu 16.04 https://www.digitalocean.com/community/tutorials/how-to-set-up-vsftpd-for-a-user-s-directory-on-ubuntu-16-04

[8] Initial Server Setup with Ubuntu 16.04 https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04

[9] linux服务器查看公网IP信息的方法 https://www.cnblogs.com/ksguai/p/6090115.html

[10] Usermod 命令详解 blog.51cto.com/urchin/987186

[11] Linux如何更改root用户密码? https://zhidao.baidu.com/question/12366388.html

[12] nano编辑器使用教程 https://www.vpser.net/manage/nano.html

[13] 在终端ssh的断开方法 https://blog.csdn.net/weixin_39366112/article/details/78175873

[14] How do I install filezilla? https://askubuntu.com/questions/297845/how-do-i-install-filezilla

猜你喜欢

转载自blog.csdn.net/weixin_39278265/article/details/86524646