最近阿里云服务器即将到期,正好618入手了腾讯云很便宜的轻量级服务器,之前阿里云服务器远程控制都是用Xshell密码登录,这次腾讯云试了试SSH免密登录,还是很好用的,正好借这个机会研究了下SSH原理
SSH是“非对称加密”非常直观的一种应用,用了SSH能很好的加深对“非对称加密”的理解
SSH方式的远程连接通常有两种方式:口令登录和密钥登录,这里接用一位博主的解释可以很清晰的理解这两种方式的差异:
- 口令验证登录
- 服务器生成公钥和私钥。
- 客户端发起连接请求,服务器将公钥发给客户端。
- 客户端生成口令(服务器密码),并用服务器发来的公钥加密,发送给服务器。
- 服务器通过私钥解密,拿到口令(服务器密码),如果正确则认证成功。
- 密钥验证登录
- 客户端生成公钥和私钥,将公钥提前部署在服务器上。
- 客户端发起连接请求。
- 服务器随机生成一个字符串,用本地的公钥加密,发送给客户端。
- 客户端通过私钥解密,将解密后的字符串发送给服务器。
- 服务器验证本地字符串和客户端发来的字符串的一致性,如果通过,则认证成功。
引用链接:SSH登录及其原理详解 - 知乎
Xshell连接采用的是密钥验证方式,所以我们需要按照以下几步来完成远程连接
1、想办法生成一个密钥对(公钥+私钥),方法有很多,windows可以直接用Xshell工具生成,linux用户可以用ssh-keygen命令生成,两个方法都很简单,网上很多,这里不做赘述。生成密钥对(两个文件)后,公钥后缀名是.pub,私钥后缀名是.pem。
2、我们既然要使用密钥验证方式登录服务器,就需要将公钥文件放到服务器上去,私钥本地自行保管
- 如果自己上传,服务器是linux的话,可以用命令cd ~/.ssh打开此目录,pwd看下是否存在authorized_keys文件,如果不存在则touch authorized_keys命令新建此文件,将步骤1生成的公钥用文本编辑器打开,复制到authorized_keys文件中
- 我用腾讯云服务器,可以直接在平台操作,如下图位置进行创建,然后在服务器密钥设置中绑定此密钥即可自动将公钥上传到服务器,绑定后可以去服务器的~/.ssh/authorized_keys文件查看此公钥(注意此图中,也有创建新密钥选项,也可以通过这个方式实现步骤1生成密钥对,生成后会自动下载私钥)
3、密钥放到服务器后,就可以本地通过Xshell进行远程密钥登录了
- 填好服务器地址,然后按照下图设置登录方式为Public Key
- "用户密钥"选择咱们前面生成的私钥文件,密码填不填都行,这个密码在密钥登录方式中没有太大的意义了,如下图
- 然后点击确认填写好用户名就行,这样就可以不输入密码实现远程连接服务器了
连接原理:
Xshell发起连接请求,远程服务器随机生成一个串,用服务器保存的公钥进行加密,返回给Xshell,Xshell用咱们选择的私钥进行解密,然后将解密的串发给远程服务器,远程服务器再通过公钥和算法计算出客户端返回的解密串是否和之前加密发给客户端的串原值一致,一致则验证通过。