访问GitHub 身份验证原理

一.身份验证原理        

         使用github时,在连接到它上面的远程git仓库时,可以使用HTTPS和SSH是两种不同的协议。它们的主要区别在于身份验证方式和连接方式:

        HTTPS:使用用户名和密码或者个人访问令牌(Personal Access Token)进行身份验证。每次推送或拉取代码时,都需要输入密码或令牌(除非你配置了密码缓存)。HTTPS通常在所有系统上都可用,且不需要额外配置。但是,如果你频繁地进行Git操作,可能会觉得每次输入密码很麻烦。
        SSH:使用SSH密钥对进行身份验证。你需要在本地生成一个SSH密钥对,然后将公钥添加到GitHub。然后,Git客户端会使用私钥进行身份验证。使用SSH方式,你只需要在第一次连接时输入私钥的密码(如果设置了的话),之后就不需要再输入密码。SSH需要在本地和GitHub上进行一些配置,但是一旦配置完成,就非常方便。

        SSH加密的原理是什么?
SSH(Secure Shell)是一种网络协议,用于安全地在不安全的网络环境中执行远程命令和传输数据。SSH的加密原理主要包括以下几个步骤:

        1.密钥交换:当SSH客户端和服务器建立连接时,它们会通过一种叫做Diffie-Hellman的算法交换密钥。这个算法可以让客户端和服务器各自生成一对公钥和私钥,然后交换公钥,从而生成一个共享的秘密密钥,而不需要直接传输这个密钥。
        2.认证:客户端使用自己的私钥对一段随机数据进行签名,然后将签名发送给服务器。服务器使用客户端的公钥验证这个签名,从而确认客户端的身份。
        3.加密和解密:客户端和服务器使用在密钥交换阶段生成的秘密密钥对数据进行加密和解密。这个密钥只在当前的SSH会话中使用,每次新的会话都会生成新的密钥。
        4.数据完整性:SSH还使用一种叫做HMAC(Hash-based Message Authentication Code)的技术来确保数据的完整性。这个技术可以检测数据在传输过程中是否被篡改。
        以上就是SSH的加密原理。通过这种方式,SSH可以在不安全的网络环境中提供安全的远程命令执行和数据传输功能。

        总的来说,HTTPS和SSH各有优势,你可以根据你的具体需求和喜好来选择。如果你希望设置简单,或者在一个严格的网络环境中(比如某些公司网络可能会阻止SSH连接),你可以选择HTTPS。如果你希望更方便,或者不想每次操作时都输入密码,你可以选择SSH。

二.GitHub公钥怎么配置

        当你在本地生成了SSH密钥对(包括一个公钥和一个私钥)后,你需要将公钥添加到GitHub账户中。这样,当你使用SSH协议进行Git操作(如clone、push、pull等)时,GitHub就可以通过这个公钥来验证你的身份。

        在GitHub上,你可以通过以下步骤添加你的SSH公钥:

        1.登录你的GitHub账户。
        2.点击右上角的头像,然后在下拉菜单中选择"Settings"。
        3.在左侧的菜单中,点击"SSH and GPG keys"。
        4.在打开的页面中,输入一个标题(通常可以填写你的电脑名称或者描述信息),然后将你的

         SSH公钥复制粘贴到"Key"的输入框中。
        5.点击"Add SSH key"按钮。,然后保存。

        添加完成后,你就可以使用SSH协议进行Git操作了。

三.个人访问令牌(Personal Access Token)配置及使用

  • 配置Personal Access Token

        如果通过HTTPS访问GitHub仓库时,是使用用户名和密码或者个人访问令牌(Personal Access Token)进行身份验证的。不过目前已经不支持用户名和密码的方式了,只支持的方式了,下面介绍如果添加和管理Personal Access Token。

     1. 登录GitHub, 单击您的个人资料照片,然后单击 Settings(设置)

     2.在左侧边栏中,单击 Developer settings

     3.在左侧边栏中,单击 Personal access tokens(个人访问令牌)

     4. 选择classic这种即可,单击 Generate new token(生成新令牌)

     5.给令牌一个描述性名称。

     6.选择要授予此令牌的作用域或权限。 要使用令牌从命令行访问仓库,请选择 repo(仓库)

     7.单击 Generate token(生成令牌)。

     8.复制生成的的token,妥善保存到一个地方(注意:token一定要保存好,因为GitHub上不能

        再次查看该生生成的token,只能重新生成!!!!!)

  •   在命令行上使用令牌

        如果您有令牌,则可以在通过 HTTPS 执行 Git 操作时输入令牌,而不是密码。

例如,在命令行中输入以下内容:

$ git clone https://主机名/username/repo.git
Username: your_username
Password: your_token

        个人访问令牌只能用于 HTTPS Git 操作。 如果您的仓库使用 SSH 远程 URL,则需要将远程 URL 从 SSH 切换到 HTTPS

        如果没有提示您输入用户名和密码,说明您的凭据可能已缓存在计算机上。 您可以在密钥链中更新您的凭据,用令牌替换您的旧密码。

        您可以使用 Git 客户端缓存 PAT,而不必为每个 HTTPS Git 操作手动输入 PAT。 Git 会将您的凭据临时存储在内存中,直到过期为止。 您还可以将令牌存储在 Git 可以在每个请求之前读取的纯文本文件中。 更多信息请参阅“在 Git 中缓存 GitHub 凭据”。

四.相关知识

        1.SSH keys 跟GPG keys 有什么区别?
SSH keys和GPG keys都是用于加密和身份验证的密钥对,包括一个公钥和一个私钥,但它们的用途和工作方式有所不同:

        SSH keys:主要用于SSH协议,用于在客户端和服务器之间建立安全的连接。当你使用SSH协议(例如,通过SSH协议访问GitHub)时,你的客户端会使用私钥进行身份验证和数据加密,而服务器会使用公钥进行身份验证和数据解密。

        GPG keys:主要用于GPG(GNU Privacy Guard)协议,用于数据加密和签名。你可以使用私钥对数据进行加密或者生成数字签名,然后使用公钥进行解密或者验证签名。在GitHub上,你可以使用GPG keys对你的提交进行签名,这样其他人就可以验证这个提交确实是由你完成的。

        总的来说,SSH keys主要用于建立安全的网络连接,而GPG keys主要用于数据加密和签名。

        2.git 在执行push操作时怎么能找到私钥?
当你使用SSH协议进行Git操作(如push)时,Git会自动查找你的SSH私钥来进行身份验证。默认情况下,Git会在~/.ssh目录下查找名为id_rsa的文件作为私钥。

        如果你的私钥不在默认位置,或者你有多个私钥并且想要指定一个特定的私钥,你可以使用SSH的ssh-agent和ssh-add命令来管理你的私钥。

        ssh-agent是一个后台程序,用于保存你的私钥和密码。你可以使用ssh-add命令将你的私钥添加到ssh-agent中,然后Git就可以通过ssh-agent来使用你的私钥。

        例如,你可以使用以下命令将你的私钥添加到ssh-agent中:

        ssh-add ~/.ssh/my_private_key
        其中,~/.ssh/my_private_key需要替换为你的私钥文件的实际路径。

        添加完成后,当你进行Git操作时,Git就会自动使用你添加到ssh-agent中的私钥进行身份验证。

        3.当你使用SSH协议进行GitHub的Push操作时,以下是一个简单的例子来说明SSH的工作原理:

        生成SSH密钥对:首先,在你的本地计算机上生成SSH密钥对。这包括一个私钥和一个公钥。你可以使用命令ssh-keygen来生成密钥对,并按照提示进行设置。
        添加公钥到GitHub账户:将生成的公钥添加到你的GitHub账户中。在GitHub的设置中,找到SSH and GPG keys选项,然后将公钥复制粘贴到其中。
        进行Push操作:在本地计算机上,进入你的代码仓库目录,并使用SSH URL进行远程仓库的克隆或添加。例如,git clone git@github.com:username/repository.git。
        进行身份验证:当你进行Push操作时,Git会使用你的私钥对数据进行加密,并将其发送到GitHub服务器。GitHub服务器会使用你之前添加的公钥来验证你的身份。
        数据传输和加密:一旦身份验证成功,Git会使用SSH协议中的加密机制,使用在密钥交换阶段生成的秘密密钥对数据进行加密。这样,你的代码和其他数据在传输过程中就得到了保护。
        通过以上步骤,你可以使用SSH协议进行GitHub的Push操作。SSH的加密原理确保了你的代码在传输过程中的安全性和完整性,同时也提供了身份验证机制,确保只有授权的用户才能进行Push操作。

        4.git remote push 到远程仓库的时候需要输入的password是什么?
        在使用git push命令推送到远程仓库时,可能需要输入密码,这个密码的具体含义取决于你使用的是哪种方式连接到远程仓库。

        如果你使用的是HTTPS方式连接到远程仓库,那么需要输入的密码通常是你的GitHub账户的密码。如果你开启了两步验证,那么需要输入的是专用于Git操作的个人访问令牌(Personal Access Token),而不是你的GitHub账户密码。

        如果你使用的是SSH方式连接到远程仓库,那么可能需要输入的是你的SSH私钥的密码。当你创建SSH密钥对时,有可能设置了一个密码来保护你的私钥。在使用私钥进行身份验证时,需要输入这个密码。

        如果你不想每次推送时都输入密码,可以配置Git记住你的密码,或者使用SSH密钥对进行身份验证,并且不为私钥设置密码。

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值