聊一聊远程控制

服务器长什么样?就是放在机柜里一层一层的像VCD还不给人碰的玩意,它没接显示器,还被锁起来,那怎么玩它?你一定会说,远程啊。完全正确,但是,该怎么远程?

有哪些远程方式

按照来源不同,大致分为第三方软件远程,和系统自带软件远程。

QQ

可能它是很多人唯一知道的远程软件,聊天窗点个按钮就能控制对方电脑,很方便。但大兄弟,能不用就不用吧,别问为什么。

TeamViewer

这是一个专业的远程软件,使用简单,缺点是收费,而且被控制的电脑的屏幕会“直播”,你晚上在公司加班,突然发现隔壁的电脑自己在动,位子上却没有人,见鬼了。

MSTSC

上面两个都是第三方软件,都免不了下载安装,服务器都讲究性能,额外的安装也意味着额外的性能消耗,所以还是系统自带的比较好。

Win + r中输入mstsc打开远程桌面连接,输入主机、用户名、密码。一旦连接上,被控制的电脑会锁屏,不存在“直播”,能够防止信息泄露。

Windows系统建议用此方式远程。

SSH

连一下个人电脑,或者Windows服务器可以用MSTSC,但是绝大部分服务器都是Linux系统,MSTSC就不好使了,那什么好使?SSH。

我们搭建的博客,无论是使用自己的Linux服务器,还是使用GitHub平台,都会用到SSH。不着急,我们慢慢讲,一个一个来。

Windows连接大法

MSTSC基于RDP协议,默认端口3389。

什么是端口

你在电脑上一边浏览网页,一边用微信聊天,网络把数据传过来,电脑是怎么知道哪些数据是给哪个程序的?网页就一定是浏览器的?聊天消息就一定是微信的?那你再开个QQ呢?

电脑就像一栋房子的管理员,每一个要通信的程序都有一间房,管理员不在乎里面住的是谁,它只在乎这间房的房号是多少。每时每刻都有房客写信出去,管理员会帮它填上寄信人“xx号房客”,等收到回信时,管理员就知道该交给谁了。这种管理方式有很多好处

  • 效率提高了。寄信时不登记房客信息,收到回信时就不用核实房客身份,“你是叫微信么,没冒充吧?”
  • 资源节省了。每一个房客只在要寄信时才住到房子里(程序开启时),它交流完就回地下室睡觉去,房间也就空出来了

一共有65536个房间,房号从0到65535,这个房号就是端口,房间里有人就叫占用。每个房客,为了保证自己的房间不被抢,都会指定一个固定的房号,这就是默认端口,当然管理员也可以让它搬到别的房间去,但总归嫌麻烦。有些房号,因为指定住它里面的房客太有名气,所以一说起号码,大家都知道里面是谁。

什么是协议

协议只是一种正式的说法,通俗一点就是约定。就像抗战时期的暗号,两个人见面前约定好,见面之后先说什么后说什么,我说什么可以表示我的身份,为了防止别人偷听,我说大的意思是小,我说强的意思是弱,那你如果不知道这个约定,你就不知道我在讲什么。所以,协议并不是要多厉害才能玩,协议内容随便定义,我喊上课你喊起立,这也是一种协议,学校定义出来的老师和学生之间的协议。如果你在不知道协议内容的情况下,听懂了对方话的意思,就叫做破解了协议,黑客干的就是这些事。

什么是RDP

RDP,Remote Desktop Protocol,远程桌面协议,专门用于Windows系统的远程连接。如果两台电脑都有遵循此协议的软件,它们就可以用这个软件互相远程连接,MSTSC就是微软官方提供的这种软件。

MSTSC,Microsoft Terminal Services Client,微软终端服务客户端,是遵循RDP协议的连接工具。现在看“MSTSC基于RDP协议,默认端口3389”这句话,有没有舒服了一点。

权限设置

连接之前,需要允许自己的电脑被远程控制,操作步骤参考 Win7系统怎么开启远程桌面?Win7远程桌面怎么用。远程协助和远程桌面是不同的功能,参考 Windows的远程协助和远程桌面的区别,我们只用配置远程桌面。

远程设置-选择用户-添加的时候,发现自己的用户搜索不到,解决办法是

  1. 右键计算机,选择管理
  2. 选择系统工具-本地用户和组-用户
  3. 出现一个列表,表头是名称全名
  4. 发现自己的用户名是全名,而选择用户那里取的是名称
  5. 名称改成和全名一致
  6. 注销或重启

Linux连接大法

本章重难点。

什么是SSH

SSH,Secure Shell,安全外壳协议,是一种加密的网络传输协议,任何网络服务都可以通过SSH实现安全传输,但最常见的用途是远程登录系统,默认端口22。参考维基百科 Secure Shell

注意名字,它不像RDP叫远程桌面,它叫安全外壳,也就是说它强调的是安全,正因为这个特点,它有更广泛的应用,而不仅仅当作远程登录。例如,我们部署博客到GitHub,在配置文件_config.yml中填写

1
2
3
4
5
deploy:
type: git
# 按SSH协议的格式,写出的地址,表示使用SSH协议,把我们生成的博客页面,传输过去
repo: git@github.com:xiaomin/xiaomin.github.io.git
branch: master

也可以改成

1
2
3
4
5
deploy:
type: git
# 按HTTPS协议的格式,写出的地址,表示使用HTTPS协议,把我们生成的博客页面,传输过去
repo: https://github.com/xiaomin/xiaomin.github.io.git
branch: master

这两个地址指向的是同一个地方,只不过使用的传输协议不同,但最终都能达到部署的目的。如果听起来有点绕,可以这么理解,你想让助理帮你寄一个包裹,于是你填了一个单,用前一种写法,表示你想让助理寄顺丰,用第二种写法,表示你想让助理寄平邮。包裹总能寄到,但寄顺丰更方便。

HTTPS也是一种加密的网络传输协议,我们下次再讲。部署博客,SSH比HTTPS好用,因为不用输入用户和密码,那SSH是如何做到这一点的?

SSH验证方式

SSH有两种验证方式

  1. 用户和密码,登录时所有信息会被加密,但可能会有别的服务器在冒充真正的服务器,无法避免被“中间人”攻击
  2. 公钥和私钥,用户为自己创建一对密钥,然后将公钥放在服务器,私钥保存在自己的电脑,连接时无需用户和密码,而且可以避免被“中间人”攻击,因为冒充的服务器没有自己保存的私钥

这种公钥和私钥的加密方式,叫做非对称加密。

非对称加密

非对称加密,也称为公开密钥加密,是密码学的一种算法,它需要两个密钥,一个是公开密钥,另一个是私有密钥;一个用作加密,另一个则用作解密。使用其中一个密钥把明文加密后所得的密文,只能用相对应的另一个密钥才能解密得到原本的明文,甚至连最初用来加密的密钥也不能用作解密。由于加密和解密需要两个不同的密钥,故被称为非对称加密。不同于加密和解密都使用同一个密钥的对称加密,虽然两个密钥在数学上相关,但如果知道了其中一个,并不能凭此计算出另外一个。因此其中一个可以公开,称为公钥,任意向外发布;不公开的密钥为私钥,必须由用户自行严格秘密保管,绝不透过任何途径向任何人提供,也不会透露给被信任的要通信的另一方。

这段话取自维基百科 公开密钥加密,解释得很清楚,就是有点长,稍微概括一下

  • 公钥用来加密,私钥用来解密
  • 公钥和私钥是一对,用公钥加密的信息,它自己都无法解密,只有与它对应的私钥才能解密
  • 公钥可以随便给其他人,不怕泄露,私钥只能自己保管
  • 信息传输过程中,只有公钥会经过网络,私钥始终在自己电脑,这样传输过程中私钥不会被窃取

生成SSH密钥对

打开命令行

1
2
3
# -t 密钥类型
# -C 备注
$ ssh-keygen -t rsa -C "xiaomin@qq.com"

确认之后系统会提示输入存储位置,和passphrase(口令),直接回车无需理会,参考 ssh-keygen基本用法。生成之后,打开个人文件夹,也就是在开始菜单中点击自己的用户名,或者打开C:\Users\xiaomin,然后找到.ssh并进入,可以看到三个文件

  • id_rsa,私钥
  • id_rsa.pub,公钥
  • known_hosts,已知主机,所有使用SSH连接过的主机的信息

用记事本打开id_rsa.pub,复制里面所有内容,谁给你粘贴,你就能控制谁。

粘贴到GitHub

直接在网页上操作,非常简单,参考 git详细教程–光速学会安装、提交托管与sshkey创建,写得很详细,而且有截图,往后翻翻。

测试是否配置成功

1
2
# 注意,这个不是自己的邮箱,不用改
$ ssh git@github.com

能看到自己GitHub的用户名,表示成功。

粘贴到服务器

1
2
3
4
5
6
# 进入Home
$ cd ~
# 新建.ssh目录
$ mkdir .ssh
$ cd .ssh
$ vim authorized_keys

authorized_keys就是用来记录公钥的文件,每一行代表一个公钥,所以如果~/.ssh/authorized_keys已存在就无需创建,直接空一行,粘贴自己的就行。测试是否配置成功

1
2
# 注意,这个不是自己的邮箱,是用户@服务器地址,需要改
$ ssh git@xiaomin.com

登录成功,并且无需密码,表示成功。