Git——The stupid content tracker(傻瓜内容跟踪器)

Git是Linux的缔造者Linus Torvalds为了帮助管理Linux内核源码而开发的一款免费、开源的分布式版本控制系统。
分布式Git相比集中式CVS/SVN的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。
如果用CVCS的话,差不多所有操作都需要连接网络;Git中的绝大多数操作都只需要访问本地文件和资源,由于本地磁盘上就保存着所有当前项目的历史更新,因此可以不用联网且处理起来速度很快。

大多数 Git 服务器都会选择使用 SSH 公钥来进行无密码登录连接。

SSH——Secure SHell(安全外壳协议)

SSH是建立在应用层和传输层基础上,默认端口是22,为远程登录会话和其他网络服务提供安全性的协议。SSH是替代Telnet(默认端口是23)和其他远程控制台管理应用程序的行业标准。

SSH服务最早是由芬兰的一家公司开发的UNIX系统上的一个程序,后来迅速扩展到其他操作平台,现在已经发展到SSH2版本。SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。由于版权和加密算法等因素的影响,很多人开始转用开源免费的openSSH(Linux/Mac OS X标配)。

SSH提供基于密钥的认证机制,你必须为自己创建一对非对称密钥(public/private key pair),并把公钥放到需要访问的服务器上进行授权。SSH1使用RSA(RonRivest、AdiShamir、LeonardAdleman)加密密钥,SSH2使用DSA(Digital Signature Algorithm,数字签名算法)密钥保护连接和认证。RSA和DSA这两种加密算法都是非对称加密算法

所谓“SSH公钥认证免密码登录认证机制”,原理如下:

(1)SSH客户端提前将SSH公钥储存在远程SSH服务器上,然后SSH客户端携带公钥向远程SSH服务器(known_hosts)发起登录请求。

(2)远程SSH服务器收到该请求之后,先在该服务器上的authorized_keys寻找你上传授权过的公钥,然后把它和你发送过来的公钥进行比较。

(3)如果两个公钥一致(Key Exchange Success),远程SSH服务器会向用户发送一段使用SSH公钥加密过的随机字符串进行身份质询(Challenge)。

(4)SSH客户端用自己的私钥解密后再发回给远程SSH服务器,远程SSH服务器对比回包中解密出来的随机字符串是否一致。如果一致,则证明用户(公钥或身份)是可信的,直接允许登录shell,不再要求密码。

Mac上预装的git和OpenSSH

1.使用ssh-keygen命令生成key pair:

--------------------------------------------------------------------------------

$ssh-keygen -t rsa -C "${YourEmail}"                                       # "-t rsa"表示使用密钥的加密类型,还可以为dsa;-C设置注释文字,比如你的邮箱“YourEmail”,不一定要是github注册邮箱
Enter file in which to save the key (/Users/faner/.ssh/id_rsa): # 直接回车
Enter passphrase (empty for no passphrase):                          # 输入密钥文件授权密码
Enter same passphrase again:                                                  # 确认密钥文件授权密码
Your identification has been saved in /Users/faner/.ssh/id_rsa.

Your public key has been saved in /Users/faner/.ssh/id_rsa.pub.

--------------------------------------------------------------------------------

此时,敲入ls命令可以看到ssh-keygen在~/.ssh目录下生成的public/private key pair,其中id_rsa为密钥对中的私钥,需妥善保管;id_rsa.pub为密钥对中的公钥,可任意公开。

RSA是一种支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的。DSA(Digital Signature Algorithm,数字签名算法)是一种标准的DSS(数字签名标准)。

id_rsa私钥类似keychain进行CSR时生成的private key;id_rsa.pub公钥则类似CSR申请下来的开发证书(在Apple Member Center中有在线备案)。

通过cat命令可以查看id_rsa.pub内容。

2.在github上为当前账号添加SSH公钥:

(1)这里Add SSH Key相当于注册到SSH服务器(github.com)的受信任列表(authorized_keys)中。


(2)SSH服务器受信任列表(authorized_keys中可以添加多个SSH客户端的公钥,其中title用于做简单识别,真正起识别作用的是公钥指纹(RSA key fingerprint)。


(3)向SSH服务器(github.com)Add自己的SSH Public Key后,github.com将这个SSH Key与你的github账号关联起来,你的机器(Mac git client)将有写权限向你github账号名下的remote repository进行push提交代码。


 

3.测试与github服务器的SSH连接:

(1)当没有使用ssh-keygen生成公钥时,执行ssh -T git@github.com,将会提示can`t be estabblished for permission denied without public key(SSH不支持匿名访问):

【1】Are you sure you want to continue connecting (yes/no)? yes#接受认可远程主机的公钥(可以核对官方给出的公钥指纹)。

【2】Warning:Permanently added ‘github.com, 192.30.252.128’(RSA) to the list of known_hosts. #github.com服务器主机已经得到认可被添加到~/.ssh/known_hosts中,可以执行cat known_hosts查看该文件。

(2)本机通过ssh-keygen生成公钥后,执行ssh -T git@github.com:

(1)Permanently added the RSA host key for IP address‘192.30.252.131’to the list of  known hosts:github.com(192.30.252.131)被添加到~/.ssh/known_hosts中。可以执行cat查看~/.ssh/known_hosts文件,实际上保存的是github.com的SSH RSA公钥(格式类似id_rsa.pub中的ssh-rsa ...),也即SSH客户端(本机)和SSH服务器(github.com)之间相互交换了SSH公钥。下次再连接github.com,系统认出它的公钥已经保存过本地了,从而跳过警告部分。

(2)提示“Saving password to keychain failed”:是因为没有勾选【在我的钥匙串中记住密码】。勾选之后重新测试

(3)提示“Hi !You've successfully authenticated”:表明你已经成功为本机设置SSH密钥对,且与github服务器身份校验通过。

(4)提示“but GitHub does not provide shell access”是因为github提供的HTTPS方式,而不是SSH方式,查一下你设置的git库的remote url,看看使用的是哪种连接方式。

(5)可以添加-v开关(ssh -vT git@github.com),打开Verbose模式,SSH在连接过程中将打印debug1级别的调试跟踪信息。

(6)如果使用了VPNGreenVPN)或ProxyGoAgent/TOR),可能导致访问github时,Chrome浏览器将提示【此网站的安全证书存在风险】而连接失败(ERR_CONNECTION_REFUSED)。

这可能是被邪恶的中间人GFW盯上了,篡改了github的证书。Chrome使用的是操作系统的证书体系,因此可到Mac OS X的Keychain Acces中删掉系统根证书(CNNIC证书清除方法 - RevokeChinaCerts)中的CNNIC根证书注意删除根证书会连带删除各级衍生子证书,故此举需谨慎)。恢复了“良民”身份后,重新访问github,Mac系统会重新下载CNNIC根证书以及GitHub证书洗白身份,又可以访问了github.com网站了!更坚决一点的做法是在钥匙串-系统根证书中双击CNNIC ROOT,在【信任】|【使用此证书时】下拉选择【永不信任】。

参考:

GitHub 和中间人攻击》《github.com的证书变自签名了?

github.com使用了无效的安全证书》《github 访问超时使用goagent解决方案

4.git clone下载开源git库Reachability

(1)Add SSH Key to GitHub后,登录github,在github开源项目网页中有三种Clone URL:

  • Subversion Clone URL,即工程github网页地址:https://github.com/tonymillion/Reachability,可通过subversion客户端进行checkout。
  • HTTPS Clone URL:https://github.com/tonymillion/Reachability.git,可通过git客户端clone版本库,需要输入账户密码。
  • SSH Clone URL:git@github.com:tonymillion/Reachability.git,可通过git客户端clone版本库,基于SSH公钥认证免密码输入。

若没有登录github.com,或登录但没有添加SSH Key,将没有SSH Clone URL。

(2)在Mac Terminal中使用"git clone${SSH url}"命令克隆git版本库到本地目录(~/Projects/git)。

参考:

git和svn之间的五个基本区别》《git和svn的比较

git和svn的详细比较》《git替代svn的可行性分析

SSH在linux安全中的作用》《SSH配置讲解大全

RSA算法原理(一)》《RSA算法原理(二)

SSH原理与运用(一)》《SSH原理与运用(二)

SSH和SSH2》《使用SSH公钥实现免密码登录

Git使用SSH公钥进行认证连接》《使用SSH密钥连接github

Git基本知识及MAC安装使用》《Mac下git与github的简单使用

Mac下的Git客户端》《在Xcode中配置使用Git

理解 Xcode 中的 Git 版本控制》《在Xcode中使用Git进行源码版本控制

Git教程-使用GitHub》《从github下载某个git库的四种方法

 
1
http://blog.csdn.net/phunxm/article/details/45083335

Mac下git通过SSH进行免密码安全连接github的更多相关文章

  1. Mac系统Git生成ssh公钥

    Mac系统Git生成ssh公钥 在使用Git仓库进行代码管理时,新的电脑上往往需要生成ssh公钥进行匹配,Mac系统生成Git公钥过程如下: 1.检查本机是否已有公钥 在终端中输入如下命令: ? 1 ...

  2. ssh配置免密码登录

    日常工作中很多情况下都需要登录服务器进行管理,一般都是用ssh进行连接,为了防止密码外泄,可以配置下ssh的免密码登录. 首先服务器两台: A:43.224.34.* B:104.238.161.* ...

  3. Mac下Git的基础操作

    目前最火的版本控制软件是Git了吧,今天简单梳理一下Mac下Git的基础操作~~ 一.什么是Git Git是一个分布式代码管理工具,用于敏捷的处理或大或小的项目,类似的工具还有svn. 基于Git的快 ...

  4. ssh key 免密码登陆服务器,批量分发管理以及挂载远程目录的sshfs

    ssh key 免密码登陆服务器,批量分发管理以及挂载远程目录的sshfs 第一部分:使用ssh key 实现服务器间的免密码交互登陆 步骤1: 安装openssh-clients [root@001 ...

  5. Mac下git的安装配置以及gerrit初次使用

    1.Mac下git下载 在终端首次运行git命令,若未安装,会提示下载开发者工具Xcode,根据提示下载即可: 2.查看git版本 git version 2.首次使用git配置 git config ...

  6. Linux中ssh的免密码登陆

    原理: Hadoop的各个节点要实时的进行各种通信的,ssh就是能让各个节点免密码的相互访问相互通信. 操作步骤: 这里用的加密方式是非对称的加密方式,具体的操作是: <1>执行命令ssh ...

  7. Mac 下 Git 的基础命令行操作

    Mac 下 Git 的基础命令行操作 sudo apt-get install git-core //安装Git 用户配置 git config --global user.name "Yo ...

  8. redhat6.2下的ssh密钥免密码登录(原创)

    这个是我自己写的,鼓励转载,请说明转载地址:http://www.cnblogs.com/nucdy/p/5664840.html 在进行hadoop的免密码的登录操作是,老是发生no route等错 ...

  9. Mac下git的环境搭建和基本使用

    前言本文将介绍git的基本概念.环境搭建.日常使用,主要针对刚接触git,或接触不久,或好久没用忘记的同学们,当然是基于mac环境的,window系统也是大同小异!本文将从以下几个模块介绍,希望能帮助 ...

随机推荐

  1. 11G新特性 -- RMAN Multisection Backups

    Oracle 11g支持以sections的方式来备份和还原数据文件.在section级别进行备份,被称作multisection backup(多段备份).section是一个数据文件中连续的块.m ...

  2. Centos下Yum安装PHP 5.5、5.6、7.0

    Centos系统自带的php版本很低,如果我们需要使用高版本的php,可以不用编译安装,直接用yum安装会非常省时省力. 1.检查当前安装的PHP包yum list installed | grep ...

  3. C# 版本的24点实现

    C# 版本的24点实现. 已经实现基本功能,可以正确的算 3, 3, 8, 8 这类组合. 稍加修改就可以支持任意数目的操作数和操作符组合形成的四则运算表达式,不限于24点. 代码还比较简单粗糙,晚一 ...

  4. 2D空间中求线段与圆的交点

    出处: https://answers.unity.com/questions/366802/get-intersection-of-a-line-and-a-circle.html 测试脚本(返回值 ...

  5. Atitit easyui翻页组件与vue的集成解决方案attilax总结

    Atitit easyui翻页组件与vue的集成解决方案attilax总结 ===============使用1 ===========\paggingUtil_easyui_vue.js2 C:\U ...

  6. (转)PyCharm报错:“No R interpreter defined: Many R……”——解决办法

    报错截图: 下载安装链接:The Comprehensive R Archive Network

  7. RSA加密和解密工具类

    import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import java.security.*; i ...

  8. java实现栈-使用LinkedList

    import java.util.LinkedList; public class LinkedListStack { public static void main(String[] args) { ...

  9. buildroot 编译问题

    buildroot 编译的时候,出现 g++: internal compiler error: Killed (program cc1plus) 这个是因为虚拟机内存不足的原因, 加上一些内存即可 ...

  10. Java注解小记

    java注解是jdk1.5以后新出的特性,注解提升了Java语言的表达能力,有效地实现了应用功能和底层功能的分离,框架/库的程序员可以专注于底层实现. 1.Java内置注解 主要有三个: @Overr ...