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. Btrace使用教程

    下载 下载链接:https://github.com/btraceio/btrace/releases/tag/v1.3.9 安装及环境配置 1.下载一个压缩包 2.解压 3.配置环境变量 sudo ...

  2. Android夜间模式的几种实现

    一.直接修改widget颜色,这种方式实现起来最简单,但需要每个控件都去修改,太过复杂.例如: /** * 相应交互,修改控件颜色 * @param view */public void onMeth ...

  3. jsp使用c:forEach报错 javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext的问题

    今天发现了一个折磨我一天的问题: 在jsp文件中使用 <c:forEach items="${checkResult}" var="item"> & ...

  4. ROS actionlib学习(一)

    actionlib是ROS中一个很重要的功能包集合,尽管在ROS中已经提供了srevice机制来满足请求—响应式的使用场景,但是假如某个请求执行时间很长,在此期间用户想查看执行的进度或者取消这个请求的 ...

  5. 10个优秀Objective-C和iOS开发在线视频教程

    如果你自己开发iOS应用,你肯定会发现网上有很多资源.学习编程的一个最好的方法就是自己写代码,而开始写代码的最快的方式就是看其他人怎么写.我们从海量视频和学习网站中整理出了我们认为对你学习Object ...

  6. 深入理解JS执行细节(写的很精辟)

    来源于:http://www.cnblogs.com/onepixel/p/5090799.html javascript从定义到执行,JS引擎在实现层做了很多初始化工作,因此在学习JS引擎工作机制之 ...

  7. ios入门篇 -hello Word(1)

    温馨提示:,如果您使用移动终端阅读本篇文章,请连接wifi的情况下阅读,里面有大量图片,以免造成您不必要的损失.   潜水博客园很多年,闲来无事,聊一下自己的经历,语文不好(如有什么错别字,请您在下评 ...

  8. Shell脚本编程(一):初识shell script

    Shell简介 Shell是一个命令解释器,它是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核 ...

  9. Atitit 数据融合merge功能v3新特性.docx

    Atitit 数据融合merge功能v3新特性.docx 1.1. 版本历史1 1.2. 生成sql结果1 1.3. 使用范例1 1.4. 核心代码1 1.1. 版本历史 V2增加了replace部分 ...

  10. N个降序数组,找到最大的K个数

    问题定义 这个问题来自网上看到的百度算法题,感觉很不错,问题定义如下: 假定有20个有序数组,每个数组有500个数字,降序排列,数字类型32位uint数值,现在需要取出这10000个数字中最大的500 ...