前言

今天突然想到反正我实验室的主机一般都不会关,这样的话我不在实验室时也可以通过远程连接来控制我的机器跑代码或者做别的事情。于是我马上查找Ubuntu远程SSH连接的教程,实现了在宿舍远程登录我的实验室主机,同时我也将整个设置过程记录下来。

SSH简介

基本原理

SSH(Secure Shell)是一套协议标准,可以用来实现两台机器之间的安全登录以及安全的数据传送,其保证数据安全的原理是非对称加密。非对称加密包含两套秘钥 – 公钥以及 私钥,其中公钥用来加密,私钥用来解密,并且通过公钥计算不出私钥,因此私钥谨慎保存在服务端,而公钥可以随便传递,即使泄露也无风险。保证SSH安全性的方法,简单来说就是客户端和服务端各自生成一套私钥和公钥,并且互相交换公钥,这样每一条发出的数据都可以用对方的公钥来加密,对方收到后再用自己的私钥来解密。

远程登录

ssh常用来远程登录到别的机器,有两种常用的方法。

账号密码登录

我连接实验室主机用的是这种方法

  1. 服务端收到登录请求后,首先互换秘钥。
  2. 客户端用服务端的公钥加密账号密码并发送
  3. 服务端用自己的秘钥解密后得到账号密码,然后进行验证
  4. 服务端用客户端的公钥加密验证结果并返回
  5. 服务端用自己的秘钥解密后得到验证结果

公钥登录

利用公钥可以进行无密码登录,我登录阿里云服务器用的是这种方法

  1. 客户端用户必须手动地将自己的公钥添加到服务器一个名叫authorized_keys的文件里,顾名思义,这个文件保存了所有可以远程登录的机器的公钥。
  2. 客户端发起登录请求,并且发送一个自己公钥的指纹(具有唯一性,但不是公钥)
  3. 服务端根据指纹检测此公钥是否保存在authorized_keys中
  4. 若存在,服务端便生成一段随机字符串,然后利用客户端公钥加密并返回
  5. 客户端收到后用自己的私钥解密,再利用服务端公钥加密后发回
  6. 服务端收到后用自己的私钥解密,如果为同一字符串,则验证通过

具体操作

安装openssh-server

在终端中输入

sudo apt-get install openssh-server

然后在终端输入

sudo ps -e |grep ssh

若输出中有sshd,说明SSH服务已经启动。若没有启动,终端输入

sudo service ssh start

SSH服务就会启动,此时再检查一次SSH服务是否已经启动。

修改配置文件

终端输入命令

sudo vim /etc/ssh/sshd_config

PermitRootLoging prohibit-password注释掉,下面再加一句

PermitRootLogin yes

这样你就可以通过root身份登录。
[scode type="yellow"]默认端口号为22,出于安全起见,可以修改为别的端口号。[/scode]

port 22

将22就改为别的数字就好了,注意不要修改为那些已经被占用的端口,同时在登录时也要记得指定为修改后的端口。

查看Ubuntu IP地址

在终端输入sudo ifconfig即可
`inet addr后面的就是Ubuntu的IP地址

远程登录

在另一台电脑的终端输入

ssh -p 端口号 用户名@IP地址

输入密码后即可实现远程登录