【git】如何生成SSH Key实现远程登录系统

Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。虽然任何网络服务都可以通过SSH实现安全传输,SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。

基本架构

SSH协议框架中最主要的部分是三个协议:

  1. 传输层协议(The Transport Layer Protocol):传输层协议提供服务器认证,数据机密性,信息完整性等的支持。
  2. 用户认证协议(The User Authentication Protocol):用户认证协议为服务器提供客户端的身份鉴别。
  3. 连接协议(The Connection Protocol):连接协议将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用。

同时还有为许多高层的网络安全应用协议提供扩展的支持。

各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。

默认情况下,用户的SSH密钥都存储在~/.ssh目录下。可以先进入该目录并列出目录中的内容,来查看是否拥有密钥对。

$ cd ~/.ssh
$ ls

//博主~/.ssh目录下返回文件有:
//id_rsa  id_rsa.pub  known_hosts

 其中id_rsa和id_rsa.pub为密钥对,带有.pub扩展名的文件是用户的公钥,另一个是私钥。

如果在上面指令运行后未有以id_dsa或id_rsa命名的文件名称返回,则可参照下面的步骤生成属于你的SSH Key。


生成SSH Key的步骤:

【第一步】在客户端生成密钥对(公钥和私钥)并保存

$ ssh-keygen -t rsa -C "[email protected]"

解释:ssh-keygen命令用于SSH生成、管理和转换认证密钥,它支持RSA和DSA两种认证密钥。其中,-t参数后是文件类型rsa,-C参数后用于指定注释,通常使用自己的邮箱名作为注释。

拓展该命令的其他参数解释

-b:指定密钥长度;
-e:读取openssh的私钥或者公钥文件;
-f:指定用来保存密钥的文件名,而不会覆盖默认文件;
-i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
-l:显示公钥文件的指纹数据;
-N:提供一个新密语;
-P:提供(旧)密语;
-q:静默模式;

一般在这条指令后会出现如下提示:

Generating public/private rsa key pair.
//密钥对正在生成中

Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):
//输入文件名来保存密钥对,直接Enter就保存在括号里的默认地址

/c/Users/Administrator/.ssh/id_rsa already exists.
//博主这里已有该文件,如不存在的情况下就不会出现此条信息,可忽略。

Overwrite (y/n)? y
//回y意为重写密钥对,回n意为不会将新密钥重写入该文件

Enter passphrase (empty for no passphrase):
//直接回Enter,这里是指添加密码,默认为空密码

Enter same passphrase again:
//同上,直接回Enter,用来确认刚输入的密码

Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa.
Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub.
//上面两行意思指密钥对已保存在上述文件路径 ~/.ssh 中,后面会输出一些公钥加密指纹与个人信息,故此处省略。

【第二步】进入公钥文件所在路径并复制公钥内容

$ cd ~/.ssh
$ vi id_rsa.pub
//id_rsa.pub中所保存的即为SSH Key,全选复制即可。

【第三步】在服务端的配置文件中加入公钥内容(例如远程线上仓库)

settings --> SSH and GPG keys --> New SSH key

在标有Key作为标题的文本输入框中粘贴从id_rsa.pub文件中复制的SSH Key,title自定义即可。

【第四步】点击Add SSH Key 即添加密钥成功

 


学习资料:SSH的安全验证

在客户端来看,SSH提供两种级别的安全验证。

  • 第一种级别(基于密码的安全验证),知道帐号和密码,就可以登录到远程主机,并且所有传输的数据都会被加密。但是,可能会有别的服务器在冒充真正的服务器,无法避免被“中间人”攻击。
  • 第二种级别(基于密钥的安全验证),需要依靠密钥,也就是你必须为自己创建一对密钥,并把公有密钥放在需要访问的服务器上。客户端软件会向服务器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,先在你在该服务器的用户根目录下寻找你的公有密钥,然后把它和你发送过来的公有密钥进行比较。如果两个密钥一致,服务器就用公有密钥加密“质询”(challenge)并把它发送给客户端软件。从而避免被“中间人”攻击。

在服务器端,SSH也提供安全验证。 在第一种方案中,主机将自己的公用密钥分发给相关的客户端,客户端在访问主机时则使用该主机的公开密钥来加密数据,主机则使用自己的私有密钥来解密数据,从而实现主机密钥认证,确保数据的保密性。 在第二种方案中,存在一个密钥认证中心,所有提供服务的主机都将自己的公开密钥提交给认证中心,而任何作为客户端的主机则只要保存一份认证中心的公开密钥就可以了。在这种模式下,客户端必须访问认证中心然后才能访问服务器主机。

发布了22 篇原创文章 · 获赞 3 · 访问量 1766

猜你喜欢

转载自blog.csdn.net/weixin_44322399/article/details/104234633
今日推荐