美文网首页
Mac 查看 SSH key

Mac 查看 SSH key

作者: 大成小栈 | 来源:发表于2021-02-10 16:31 被阅读0次

    SSH(Secure Shell)是一种网络协议,即非常安全的shell,主要用于计算机间加密传输。SSH的主要目的是用来取代传统的 telnet 和 R 系列命令(rlogin、rsh、rexec 等)远程登录和远程执行命令的工具,实现对远程登录和远程执行命令加密,防止网络监听导致密码泄露的问发生。

    1. 查看 Mac 上的 SSH key

    最近在本地Git服务器上创建工程后,网页上提示:需要在其上添加client主机的SSH key,才能正常推拉代码。我用的是Mac,那怎样才能查看本机的SSH key呢?

    打开终端,在终端中分别输入如下命令:

    $ cd .ssh/
    $ ls -al
    

    红框中的文件,就存储着 SSH key:

    读取文件内容,显示在控制台上,其中,以ssh-rsa... 开头完整字的符串就是的SSH key。

    $ cat id_rsa.pub 
    

    2. 与SSH 相关的概念

    2.1 加密

    加密是将一段数据处理之后,输出为一段外人无法或者很难破译的数据,只有指定的人可以解密。 一般来说,加密过程会有一个key,这个key作为加密的参数, 解密时也会用一个相关联的key作为输入。粗略来说是下面的流程:

    加密方:encrypted_data = encrypt(raw_data, key)
    解密方:raw_data = decrypt(encrypted_data, key1)

    主流加密算法一般分为两类:

    • 对称加密(私钥加密)

    对称加密就是加密方和解密方用的都是同一个key,这个key对于加密方和解密方来说是保密的,是不能让第三方知道的。第三方不知道私钥时,是很难将加密的数据解密的。一般来说是加密方先产生私钥,然后通过一个安全的途径来告知解密方这个私钥。

    • 非对称加密(公钥加密)

    非对称加密需要解密的一方首先生成一对密钥,一个私钥(private key)一个公钥(public key),私钥留在本地不能泄露出去,而公钥则可以任意对外发布。用公钥进行加密获得的数据,只能用私钥才能解密。加密方首先从解密方获取公钥,然后利用这个公钥进行加密,把加密后的数据发送给解密方,解密方利用私钥进行解密。如果加密的数据在传输过程中被第三方截获,因为其没有私钥,也是没有办法进行解密的。

    注意:
    公钥加密的问题还包括获取了公钥之后,加密方如何保证公钥来自于确定的一方,而不是某个冒充的机器,这也就涉及到了公钥加密里面比较重要的一步 —— 身份验证
    一般,对称加密都会比非对称加密效率高,所以大数据量的加密一般都会使用对称加密,而非对称加密会作为身份验证和交换私钥的一个手段

    2.2 数据的一致性(完整性)

    数据的一致性是指如何保证一段数据在传输的过程中没有被遗漏、破坏或者修改过。目前普遍的做法是对数据计算hash值(摘要算法),得到的hash值和数据一起传输,然后在收到数据的时候也对数据进行hash,将得到的hash值和传输过来的hash值进行比对,如果一样,则说明收到的数据是完整的,否则,是被修改过的。

    目前流行的hash算法有MD5、SHA-1算法。

    2.3 身份验证

    身份验证是指判断一个人或者机器是不是由第三方冒充的(类似于https抓包中的代理)。在SSH里面,这个过程主要是通过公钥来完成的,服务器会维护一个公钥列表,保存的是它信任的机器上面的公钥,在进行SSH连接时,客户端送过来一个公钥,然后服务器就会在列表中进行查找,如果这个公钥在列表中存在,就说明这个客户端是允许进行连接的。

    此处有个问题,那公钥会不会被截获???

    3. SSH 的工作原理

    SSH的机制大体是,本地客户端发送一个连接请求到远程的服务端,服务端检查申请的包和IP地址再发送密钥给SSH客户端,本地客户端再将密钥发回给服务端,到此为止,连接建立。服务端启动SSH服务器后,sshd进程运行并在默认的22端口进行监听。

    SSH机制中安全验证方式包括,基于口令的安全验证(账号密码)和基于公钥钥的安全验证:

    • 密码认证缺点

      1. 密码容易被破解;
      2. 用户无法空密码登录;
      3. 多个人登录同一账户时,需所有用户都知道密码,并且容易泄露,修改密码极不便。
    • 公钥认证

      1. 允许空密码登录;
      2. 公钥,任何人都能看到,用户加密;
      3. 私钥,只有拥有者看到,用于解密;
      4. 多人登录同一账户时,可通过各自的公钥登录到系统的;
      5. 通过公钥加密的的密文使用私钥轻松解密,但根据公钥来猜测私钥十分困难。
    3.1 基于公钥的认证过程

    本地生成一对密钥,并把公钥放到需要访问的服务器上。如果需要连接到SSH服务器上,客户端软件就会向服务器发送请求,请求用本地的密钥进行安全验证,服务器收到请求后,先在该服务器上的主目录下寻找客户端的公钥,然后把它和客户端发来的公钥进行比较。如果一致,服务器就用这个公钥加密“质询”(challenge)并把它发送给客户端软件,客户端本地接收到“质询”之后,就可用本地的私钥解密再把它发给服务器,即建立连接。

    SSH 的公钥认证利用了非对称加密的特性。服务器和客户端都各自拥有自己的公钥和密钥,如下:

    Ac 客户端公钥
    Bc 客户端私钥
    As 服务器公钥
    Bs 服务器私钥

    在认证之前,客户端需要通过某种方法将公钥 Ac 登录到服务器上。认证过程分为两个步骤:

    1. 会话密钥(session key)生成
    1)客户端请求连接服务器,服务器将 As 发送给客户端;
    2)服务器生成会话ID(session id),设为 p,发送给客户端;
    3)客户端生成会话密钥(session key),设为 q,并计算 r = p xor q;
    4)客户端将 r 用 As 进行加密,结果发送给服务器;
    5)服务器用 Bs 进行解密,获得 r;
    6)服务器进行 r xor p 的运算,获得 q;
    7)至此服务器和客户端都知道了会话密钥q,以后的传输都将被 q 加密。

    2. 认证
    1)服务器生成随机数 x,并用 Ac 加密后生成结果 S(x),发送给客户端;
    2)客户端使用 Bc 解密 S(x) 得到 x;
    3)客户端计算 q + x 的 md5 值 n(q+x),q为上一步得到的会话密钥;
    4)服务器计算 q + x 的 md5 值 m(q+x);
    5)客户端将 n(q+x) 发送给服务器;
    6)服务器比较 m(q+x) 和 n(q+x),两者相同则认证成功。

    3.2 基于公钥的加密过程

    A和B,A想把一段明文通过双密钥加密后发送给B,B有一对公钥和私钥,加密解密过程:

    1. B将公钥发送给A
    2. A用B的公钥加密自己要发送的明文消息,然后传送给B
    3. B用自己私钥解密A的消息

    基于公开密钥的认证过程:

    身份认证和加密不同,只要身份认证,鉴别用户真伪。
    只要鉴别用户的私钥是正确的,就可以鉴别身份真伪。

    A和B两个用户,A想让B知道自己是真实的A,不是假冒的,因此身份认证过程:

    1. A用自己的私钥对文件加密,从而对文件签名,并将签名文件发送给B
    2. B用A的公钥解密文件,从而验证签名,完成身份认证过程

    再是文件加密解密过程:同上(需完成两次验证)

    4. SSH 建连过程抓包

    主要包括以下步骤:

    • TCP 三次握手
    • SSH 协议版本协商
    • 客户端与服务端的公钥交换
    • 加密算法协商
    • 客户端使用对称加密的密钥认证
    • 客户端与服务端安全通信

    我使用 wireshark 抓包并查看了一下其 SSH 的建连过程,如下:

    ssh作为工具是分为服务端和客户端的,在服务端它是 sshd,一般占用 22 端口。我们平常使用的是其客户端,一般用法为 ssh user@host,然后根据 ssh 的提示,我们输入密码后登陆到服务器。

    参考文章:
    http://www.voidcn.com/article/p-ppggwxwc-or.html
    https://www.it610.com/article/3352318.htm

    SSH公钥、私钥的基本概念
    SSH简介及公钥、私钥的基本概念
    SSH 的公钥与私钥
    数字证书、公钥、私钥概念
    公钥、私钥、证书的基本概念和使用
    转载 公钥、私钥、证书的基本概念和使用
    SSH 公钥私钥认证
    公钥,私钥和数字证书基本概念
    公钥私钥
    公钥/私钥

    相关文章

      网友评论

          本文标题:Mac 查看 SSH key

          本文链接:https://www.haomeiwen.com/subject/fanxxltx.html