注意事项与声明

平台: Windows 10

作者: JamesNULLiu

邮箱: jamesnulliu@outlook.com

博客: https://www.cnblogs.com/jamesnulliu

学习笔记 转载请注明出处 欢迎留言

0. 前言

本系列文章是 git & github 的入门教程.

本系列文章优势:

  1. 零基础
  2. 深入浅出
  3. 知识点涵盖面广

本系列其他文章的链接

尽管如此, 想要真正学会 git & github 建议不要看任何教程, 直接看 git 的 官方文档.


1. 为什么使用 SSH protocol

主系列教程中, 我们使用 HTTPS 协议 连接远程仓库.

HTTPS 协议 是目前比较受用户青睐的连接方式, 用以下命令可以查看到当前 origin 指向的是以 https 开头的 URL:

$ git remote -v

HTTPS 与 SSH 都是一种安全的网络连接协议:

  • 使用 HTTPS 协议对远程仓库操作需要提供用户的账号和密码 (没有提示输入是因为 git 保存了你的账号密码);
  • 使用 SSH 协议对远程仓库操作, 首先需要匹配保存在电脑中的私钥, 其次如果用户对私钥设置了密码, 还需提供该密码.

对于公开的项目, 用何种协议或许无关紧要;

但对于私有的 (或团队管理) 的项目, 我们应该选择一种更加安全的信息保护措施.

相较 HTTP, HTTPS 已经足够安全; 但由于 SSH 基于 非对称加密技术, 它的安全性又更胜一筹.

2. 删除 SSH keys

在某些情况下, 如果绑定的密钥出现问题, 我们需要需要删除它.

后续节中, 如果发现密钥出问题, 请回到这步删除你的密钥.

  1. 进入储存了密钥的文件夹 (默认在 C:/Users/你的用户名/.ssh/ );
  2. 删除出现问题的密钥对(一个没有后缀名的文件(private key) 和 一个同名但后缀名为.pub的文件(public key));
  3. 删除 known_hostsknown_hosts.old (如果有);
  4. 如果有 config 文件, 用记事本打开, 删除其中出现问题的密钥配置;
  5. 登录 github 账号, 在 Settings 页面左侧栏中找到 SSH and GPG keys, 删除已有的 ssh 密钥.

3. 创建 SSH keys

在 git 中存在两种算法生成密钥, 一种是 rsa, 另一种是 ed25519.

ed25519 是一种 ECC 算法, 比起传统的 rsa 更加现代化和高效.

因此推荐使用 ed25519 算法生成密钥.

  1. 在任意位置右键打开 git bash, 在终端输入以下命令 (建议将引号内内容替换为自己的邮箱):
    $ ssh-keygen -t ed25519 -C "<comments>" -f ~/.ssh/my_github_ed25519
    • ssh-keygen 表示生成 ssh 密钥;
    • -t ed25519 表示使用 ed25519 算法; 如果使用 rsa 算法, 建议输入 -t rsa -b 4096, 即生成 4096 bits 的密钥;
    • -C "<comments>" 是对该密钥的说明, 引号内可以填写邮箱或者任何文字;
    • -f ~/.ssh/my_github_ed25519 指出了密钥的生成路径以及密钥的文件名, 文件名可以依据自己的需求更改, 密钥可在 C:/Users/你的用户名/.ssh/ 文件夹内找到.
  2. 接着终端提示设置密码, 当远程的公钥与电脑的私钥匹配后, 用户希望进一步操作则需要输入密码.

    强烈建议设置密码, 但请确保自己记得住该密码.

    在你输入密码时, 终端的界面上不会显示出白色的密码字符, 这是对周围环境的防范.
  3. 再次输入与刚刚相同的密码, 匹配成功后显示密钥成功生成, 并输出了密钥的指纹和随机图像. 可以忽略这些内容;
  4. 进入 C:/Users/你的用户名/.ssh/ 文件夹 (没有就自己创建一个), 右键新建文本文档, 取名为 "config" (不要保留.txt后缀名);

    右键选择用记事本打开, 在里面输入以下内容 (最后一行是密钥路径和文件名, 注意根据自己的情况更改):
    Host github.com
    Hostname github.com
    # ProxyCommand connect -S 127.0.0.1:7890 %h %p
    User git
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/my_github_ed25519
    • 关于 Host 和 Hostname

      Host 是别名, Hostname 是域名;

      例如命令 ssh -T git@github.comgithub.com 是 Hostname;

      如果将 Host 设置为 github, 那么只需输入 ssh -T github 就行;

      但此时输入 ssh -T git@github.com 会出错,

      因此务必统一将 Host & Hostname 设置为 github.com 以避免莫名其妙的错误.
    • 关于 Proxy

      上文给出的配置命令中用 # 注释掉了 ProxyCommand, 如果希望配置代理, 请删除 # 并按照以下规则改动命令和端口:

      SOCKS代理: ProxyCommand connect -S localhost:1080 %h %p

      HTTP代理: ProxyCommand connect -H localhost:1080 %h %p

      注: 本文是基于windows平台撰写的, 上述代理方式使用了 Git for Windows 同捆的 connect.exe. 如果是 Linux 平台, 需要额外安装 connect-proxy.
    • 关于 127.0.0.1 和 7890

      127.0.0.1 指本地ip地址, 7890 指代理的端口.

4. 连接到 Remote Repository

  1. 进入储存了密钥的文件夹 (默认在 C:/Users/你的用户名/.ssh/ ),

    用记事本打开刚刚创建的密钥对的公钥 (你取的文件名.pub),

    复制里面的所有内容.
  2. 登录 github 账号,

    Settings 页面左侧栏中找到 SSH and GPG keys,

    点击右侧按钮 New SSH key,

    随便取个 Title,

    在 Key 的输入框中粘贴刚刚复制的公钥.
  3. 在任意位置右键打开 git bash, 在终端输入以下命令:
    $ ssh -T git@github.com

    终端提示输入密码, 如果是新的密钥, 成功后会提示该没要还没被授权, 提问是否授权;

    输入 yes, 成功后会有类似于: Hi jamesnulliu! You've successfully authenticated, but GitHub does not provide shell access. 的提示;

    如果终端提示: git@github.com: Permission denied (publickey)., 那请检查 第3节第4步 中的 config 文件 是否配置正确, 如果还是不行就回到 第2节 删除 ssh key 重新来过.

  4. 再次输入以下命令:
    $ ssh -T git@github.com

    输入密码后终端给出类似于 Hi jamesnulliu! You've successfully authenticated, but GitHub does not provide shell access. 的提示, 说明密钥连接成功.

5. 用 SSH protocol 进行项目管理

5.1. New Repository

和 HTTPS 协议唯一不同的地方在于, 在 github 上复制项目链接的时候选择 HTTPS 旁边的 SSH, 点小方块复制连接.

在外部文件夹使用以下命令 clone 储存库 (更换为你的储存库链接):

$ git clone git@github.com:jamesnulliu/test.git

clone 完成后将工作区切换到 clone 下来的文件夹 (git储存库) 内, 在终端输入以下命令:

$ git remote -v

可以看到现在 origin 指向的已经是 ssh 协议的链接了.

5.2. 更改已有 Git Repository 的连接方式

git remote -v 查看git储存库链接方式;

如果git储存库已经用 https 协议链接, 请遵输入以下命令更改 origin 指向的 URL (xxx 替换成 ssh 连接地址).

$ git remote set-url origin xxxxxxx

参考:

git@github.com: Permission denied (publickey)

Git SSH密钥删除与创建

HTTPS vs SSH in git

使用 Ed25519 算法生成你的 SSH 密钥

详解:为GitHub、Gitlab账号同时添加、管理多个SSH-Key

How to set SSH on GitHub using Ed25519 algorithm in Colab?


推荐阅读:

G&GH04 本地连接至远程

Git&GitHub 03 使用 SSH 协议的更多相关文章

  1. Jenkins配置git/github 插件的ssh key

    参考来源:http://jingyan.baidu.com/article/a65957f4f0acc624e67f9bc1.html 方式一:本地需要生成公私钥文件,git/github中新建ssh ...

  2. git for windows 的默认工作路径(HOME)的设置以及Git与GitHub之间的SSH加密协议

    1.安装及配置默认路径 Windows中从GitHub上面:https://git-for-windows.github.io/ 下载安装好git后(双击,改一下需要的安装路径,一路确定就好了),安装 ...

  3. 15.Git四种协议-本地协议(local)、HTTP协议、SSH协议、Git协议

    1.本地协议(loacl) 最基本的协议,其远程仓库其实就是硬盘内部的一个目录(例如D:\\project).常见于团队内的人对一个共享的文件系统(例如NFS)具有访问权限,或者多人共用一台电脑的情况 ...

  4. GitHub使用笔记1:git客户端配置多ssh key

    公司用gitlab 外网的github同时配置 这样就导致我们要配置不同的ssh-key对应不同的环境. 具体操作步骤如下: 1:生成一个公司用的SSH-Key $ ssh-keygen -t rsa ...

  5. CENTOS下搭建git代码仓库 ssh协议

    centos服务器下搭建git仓库,使用ssh协议管理仓库代码权限    git官网(http://git-scm.com/) 使用ssh协议: 一.安装git,使用yum install git 或 ...

  6. github git clone ssh协议 clone超慢解决方案,提高Github Clone速度

    即使进行了fq吧但是git clone ssh协议就是慢 2kb/s你能忍,坚决不能忍. github git clone ssh协议 clone超慢解决方案 151.101.72.249 globa ...

  7. 基于SSH协议clone GitHub远端仓库到本地-git

    经常逛 GitHub 的可能都知道,在 clone 远端仓库的时候,会有两个选项,如下图: 首先我们来说明一下两种方式的区别. 使用 HTTPS url 克隆对初学者来说会比较方便,复制HTTPS u ...

  8. Git : SSH 协议服务器

    SSH 协议用于为 Git 提供远程读写操作,是远程写操作的标准服务. SSH协议语法格式 对于拥有 shell 登录权限的用户账号,可以用下面的语法访问 Git 版本库: 语法 1 : ssh:// ...

  9. Git和SSH协议

    SSH(安全外壳协议)为Secure Shell的缩写,由IETF的网络工作小组(Network Working Group)所制定:SSH为建立在应用层和传输层基础上的安全协议.SSH是目前较可靠, ...

随机推荐

  1. ArrayList分析2 :Itr、ListIterator以及SubList中的坑

    ArrayList分析2 : Itr.ListIterator以及SubList中的坑 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/16409137.html ...

  2. 不是吧?30秒 就能学会一个python小技巧?!

    大家好鸭!我是小熊猫 很多学习Python的朋友在项目实战中会遇到不少功能实现上的问题,有些问题并不是很难的问题,或者已经有了很好的方法来解决.当然,孰能生巧,当我们代码熟练了,自然就能总结一些好用的 ...

  3. 【FAQ】华为帐号服务报错 907135701的常见原因总结和解决方法

    很多开发者在接入华为帐号服务时,经常会出现907135701的报错.根据官网文档说明,错误码907135701表示: 这个错误码在安卓和鸿蒙上都会出现,导致该报错的原因有很多,开发者可以按照下面几点进 ...

  4. react antd上拉加载与下拉刷新与虚拟列表使用

    创建项目 create-react-app antdReact 安装:antd-mobile.react-virtualized npm i antd-mobile -S npm i react-vi ...

  5. 05 MySQL_主键约束

    主键约束 主键: 用于表示数据唯一性的字段称为主键: 约束:就是对表字段添加限制条件 主键约束:保证主键字段的值唯一且非空: - 格式 : create table t1(id int primary ...

  6. linux环境下修改网卡为eth0

    如果没有在安装系统之前传递内核参数将⽹卡名称更改为eth*,则可以在安装系统后修改 vim /etc/default/grub GRUB_DEFAULT=0 GRUB_TIMEOUT_STYLE=hi ...

  7. Centos7较为彻底的删除mysql

    Centos7下较为彻底的删除mysql(root 身份操作) 删除mysql安装包 1. yum检查 yum list installed | grep mysql 安装则直接删除 示例:yum r ...

  8. nginx反向代理缓存配置

    关于nginx的反向代理缓存配置,用的最多的就是CDN公司,目前CDN公司用纯nginx做缓存的已经很少了,基本都用tnginx(阿里的).openresty:但是这两款软件都是基于nignx开发的, ...

  9. static关键字和代码块

    static关键字 static修饰的变量称为静态变量/共享变量/类变量 用于修饰类的成员,如成员变量.成员方法以及代码块等,内static修饰的成员具备一些特殊性 1.静态变量 在java类中使用s ...

  10. Ubu18开机自启动-Systemd

    参考链接: https://blog.csdn.net/qq_16268979/article/details/114771854 本文内容为个人测试记录,具体文件目录请以读者自己电脑为准,此处只是提 ...