Mac下git通过SSH进行免密码安全连接github
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)如果使用了VPN(GreenVPN)或Proxy(GoAgent/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,在【信任】|【使用此证书时】下拉选择【永不信任】。
参考:
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的可行性分析》
《Git使用SSH公钥进行认证连接》《使用SSH密钥连接github》
《Git基本知识及MAC安装使用》《Mac下git与github的简单使用》
- 顶
- 1
- http://blog.csdn.net/phunxm/article/details/45083335
Mac下git通过SSH进行免密码安全连接github的更多相关文章
- Mac系统Git生成ssh公钥
Mac系统Git生成ssh公钥 在使用Git仓库进行代码管理时,新的电脑上往往需要生成ssh公钥进行匹配,Mac系统生成Git公钥过程如下: 1.检查本机是否已有公钥 在终端中输入如下命令: ? 1 ...
- ssh配置免密码登录
日常工作中很多情况下都需要登录服务器进行管理,一般都是用ssh进行连接,为了防止密码外泄,可以配置下ssh的免密码登录. 首先服务器两台: A:43.224.34.* B:104.238.161.* ...
- Mac下Git的基础操作
目前最火的版本控制软件是Git了吧,今天简单梳理一下Mac下Git的基础操作~~ 一.什么是Git Git是一个分布式代码管理工具,用于敏捷的处理或大或小的项目,类似的工具还有svn. 基于Git的快 ...
- ssh key 免密码登陆服务器,批量分发管理以及挂载远程目录的sshfs
ssh key 免密码登陆服务器,批量分发管理以及挂载远程目录的sshfs 第一部分:使用ssh key 实现服务器间的免密码交互登陆 步骤1: 安装openssh-clients [root@001 ...
- Mac下git的安装配置以及gerrit初次使用
1.Mac下git下载 在终端首次运行git命令,若未安装,会提示下载开发者工具Xcode,根据提示下载即可: 2.查看git版本 git version 2.首次使用git配置 git config ...
- Linux中ssh的免密码登陆
原理: Hadoop的各个节点要实时的进行各种通信的,ssh就是能让各个节点免密码的相互访问相互通信. 操作步骤: 这里用的加密方式是非对称的加密方式,具体的操作是: <1>执行命令ssh ...
- Mac 下 Git 的基础命令行操作
Mac 下 Git 的基础命令行操作 sudo apt-get install git-core //安装Git 用户配置 git config --global user.name "Yo ...
- redhat6.2下的ssh密钥免密码登录(原创)
这个是我自己写的,鼓励转载,请说明转载地址:http://www.cnblogs.com/nucdy/p/5664840.html 在进行hadoop的免密码的登录操作是,老是发生no route等错 ...
- Mac下git的环境搭建和基本使用
前言本文将介绍git的基本概念.环境搭建.日常使用,主要针对刚接触git,或接触不久,或好久没用忘记的同学们,当然是基于mac环境的,window系统也是大同小异!本文将从以下几个模块介绍,希望能帮助 ...
随机推荐
- WPF的5种绑定模式(mode)
WPF的绑定模式(mode)是枚举的 枚举值共有5个 1:OneWay(源变就更新目标属性) 2:TwoWay(源变就更新目标并且目标变就更新源) 3:OneTime(只根据源来设置目标,以后都不会变 ...
- !HDU 1574 RP-dp-(重点在状态确定)
题意:有n件事.每件事若发生有两种情况.添加RP为a,可是收益会降低c:降低R为a,收益会添加c. 每件事可以发生的前提是小于等于或者大于等于门限值b.求最大收益. 分析:这题我没找到状态,所以就不会 ...
- nginx启动常遇到的问题
问题1: nginx: [emerg] open() "/opt/soft/nginx/mime.types" failed (2: No such file or directo ...
- Django Web开发学习笔记(4)
第四章 模板篇 上一章的内容,我们将HTML的代码和Python代码都混合在了在view.py的文件下.但是这样做的坏处无疑是明显的,引用DjangoBook的说法: 对页面设计进行的任何改变都必须对 ...
- 【C语言】数组名传递给函数,数组的sizeof变为4的原因
C语言中,数组名作为参数传递给函数时,退化为指针,sizeof对指针操作结果应该是4.例子如下: #include<iostream> using namespace std; void ...
- ASP.NET Web API(MVC API)
ASP.NET Web API是一个框架,可以很容易构建达成了广泛的HTTP服务客户端,包括浏览器和移动设备.是构建RESTful应用程序的理想平台的.NET框架. 上面是微软对Web API给出 ...
- 实战c++中的vector系列--vector<unique_ptr<>>初始化(全部权转移)
C++11为我们提供了智能指针,给我们带来了非常多便利的地方. 那么假设把unique_ptr作为vector容器的元素呢? 形式如出一辙:vector<unique_ptr<int> ...
- 不同局域网中同一IP地址的计算机怎么通信的
1.IP地址在192.--.255之内的是私有地址,即192.168.1.56的电脑a是不能直接与192.168.1.56的电脑b进行通信的.他们需要用到NAT技术,即网络地址转换.2.NAT的作用是 ...
- 物联网架构成长之路(7)-EMQ权限验证小结
1. 前言 经过前面几小节,讲了一下插件开发,这一小节主要对一些代码和目录结构进行讲解,这些都是测试过程中一些个人经验,不一定是官方做法.而且也有可能会因为版本不一致导致差异. 2. 目录结构 这个目 ...
- pandas DataFrame(3)-轴
和numpy数组(5)-二维数组的轴一样,pandas DataFrame也有轴的概念,决定了方法是对行应用还是对列应用: 以下面这个数据为例说明: 这个数据是5个车站10天内的客流数据: rider ...