git使用https协议,每次pull,push都要输入密码,使用git协议,使用ssh秘钥,可以省去每次输密码

大概需要三个步骤:
一、本地生成密钥对;
二、设置github上的公钥;
三、修改git的remote url为git协议。

一、生成密钥对。
=============
大多数 Git 服务器都会选择使用 SSH 公钥来进行授权。系统中的每个用户都必须提供一个公钥用于授权,没有的话就要生成一个。生成公钥的过程在所有操作系统上都差不多。首先先确认一下是否已经有一个公钥了。SSH 公钥默认储存在账户的主目录下的 ~/.ssh 目录。进去看看:
$ cd ~/.ssh 
$ ls
authorized_keys2  id_dsa       known_hosts config            id_dsa.pub
关键是看有没有用 something 和 something.pub 来命名的一对文件,这个 something 通常就是 id_dsa 或 id_rsa。有 .pub 后缀的文件就是公钥,另一个文件则是密钥。假如没有这些文件,或者干脆连 .ssh 目录都没有,可以用 ssh-keygen 来创建。该程序在 Linux/Mac 系统上由 SSH 包提供,而在 Windows 上则包含在 MSysGit 包里:
$ ssh-keygen -t rsa -C "your_email@youremail.com"

# Creates a new ssh key using the provided email # Generating public/private rsa key pair.

# Enter file in which to save the key (/home/you/.ssh/id_rsa):

直接Enter就行。然后,会提示你输入密码,如下(建议输一个,安全一点,当然不输也行):
Enter passphrase (empty for no passphrase): [Type a passphrase] 
# Enter same passphrase again: [Type passphrase again]
完了之后,大概是这样。
Your identification has been saved in /home/you/.ssh/id_rsa. 
# Your public key has been saved in /home/you/.ssh/id_rsa.pub. 
# The key fingerprint is: # 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@youremail.com
这样。你本地生成密钥对的工作就做好了。

二、添加公钥到你的github帐户
========================
1、查看你生成的公钥:大概如下:
$ cat ~/.ssh/id_rsa.pub  
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlE
LEVf4h9lFX5QVkbPppSwg0cda3 Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA t3FaoJoAsncM1Q9x5+3V
0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx NrRFi9wrf+M7Q== schacon@agadorlaptop.local
2、登陆你的github帐户。然后 Account Settings -> 左栏点击 SSH Keys -> 点击 Add SSH key
3、然后你复制上面的公钥内容,粘贴进“Key”文本域内。 title域,你随便填一个都行。
4、完了,点击 Add key。

这样,就OK了。然后,验证下这个key是不是正常工作。
$ ssh -T git@github.com
# Attempts to ssh to github
如果,看到:
Hi username! You've successfully authenticated, but GitHub does not # provide shell access.
就表示你的设置已经成功了。

三、修改你本地的ssh remote url. 不用https协议,改用git 协议
================================================
可以用git remote -v 查看你当前的remote url
$ git remote -v
origin https://github.com/someaccount/someproject.git (fetch)
origin https://github.com/someaccount/someproject.git (push)
可以看到是使用https协议进行访问的。

你可以使用浏览器登陆你的github,在上面可以看到你的ssh协议相应的url。类似如下:

git@github.com:someaccount/someproject.git

这时,你可以使用 git remote set-url 来调整你的url。

git remote set-url origin git@github.com:someaccount/someproject.git

完了之后,你便可以再用 git remote -v 查看一下。

OK。

以上操作表明我们本地到github上可以实现无需输入用户名密码就可以提交文件。但是实际我们再来提交代码时仍然提示需要输入用户名密码,这是怎么回事?

[plain] view plain copy

 
  1. [root@client css]# git push origin master
  2. Username for 'https://github.com': yangfei2013
  3. Password for 'https://yangfei2013@github.com':
  4. remote: Invalid username or password.
  5. fatal: Authentication failed for 'https://github.com/yangfei2013/ghblog.git/'
 

原来git提交有两个地址一个是https://github.com/yourname/repo.git,还有一个地址是git@github.com:yourname/repo.git,如果我们配置了公钥,那么再提交代码时需要使用git@github.com:yourname/repo.git的url来提交。这样就需要我们配置这个提交的URL地址,没有修改配置之前我们通过 git config --list可以看到相关配置。

[plain] view plain copy

 
  1. [root@client css]# git config --list
  2. user.name=yangfei2013
  3. user.email=yangfei5459@126.com
  4. core.repositoryformatversion=0
  5. core.filemode=true
  6. core.bare=false
  7. core.logallrefupdates=true
  8. remote.origin.url=https://github.com/yangfei2013/ghblog.git
  9. remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
  10. branch.master.remote=origin
  11. branch.master.merge=refs/heads/master

第三步、配置提交的URL,更改项目路径下.git/config文件,修改remote.origin.url

更改之后,我们再通过git config --list查看remote.origin.url确实发生了变化

更改之后再次提交代码,就不出现提示输入用户名和密码了。

[plain] view plain copy

 
  1. [root@client css]# vi ../.git/config
  2. [root@client css]# git push origin master
  3. Warning: Permanently added the RSA host key for IP address '192.30.255.112' to the list of known hosts.
  4. Counting objects: 7, done.
  5. Compressing objects: 100% (3/3), done.
  6. Writing objects: 100% (4/4), 358 bytes | 0 bytes/s, done.
  7. Total 4 (delta 2), reused 0 (delta 0)
  8. remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
  9. To git@github.com:yangfei2013/ghblog.git
  10. 8dd24e8..3fb9ab9  master -> master

github使用ssh秘钥的好处以及设置(转)的更多相关文章

  1. TortoiseGit 绑定 GitHub/Gitee ssh秘钥

    小乌龟生成私钥和公钥 打开PuTTYgen 生成公钥/私钥文件 打开Pageant添加私钥.ppk文件 打开公钥文件获取key 打开GitHub/Gitee添加公钥 Gitee GitHub

  2. 服务器使用ssh秘钥登录并禁止密码登录

    问题: 最近在登录服务器的时候,每次都会有提示999+ falied login等字眼,意思就是自己的服务器密码正在被人暴力破解.想象以下,别人有了你的服务器的root登录密码,那么就可以对你的服务器 ...

  3. TortoiseGit与GIt生成ssh秘钥添加到github账号的简单方法!简单使用

    今天升级了自己电脑上的git与TortoiseGit,全部换成了最新版,后来不知道怎么的git的秘钥还能使用,可以直接拉取或者提交ssh地址克隆的代码,可是小乌龟客户端就悲剧了 公司的项目有key.p ...

  4. github 生成配置ssh 秘钥方法详解

    如果安装github成功后,当从本地提交文件到github的时候,提交不成功,报错,可能问题就是你还没有生成ssh秘钥 1.当你提交文件到github,不成功,出现如下的情况,就代表着github上面 ...

  5. 【github】添加 ssh 秘钥

    1 生成秘钥 打开shell 备注: 123@example.com 为邮箱地址 ssh-keygen -t rsa -C "123@example.com" 此处选Y ,其他都是 ...

  6. 生成SSH秘钥连接github(详细教程)

    第一步.首先,检查下自己之前有没有已经生成: 在开始菜单中打开git下的git bash(当然,在其他目录下打开git bash也是一样的): 然后执行 cd ~/.ssh 第二步.如果能进入到.ss ...

  7. git配置ssh秘钥(公钥以及私钥)linux

    本文默认已经安装git,并有github或者gitlab账号 git在linux下安装参考:https://www.cnblogs.com/lz0925/p/10791147.html 在Linux中 ...

  8. Git仓库由HTTPS切换成ssh秘钥连接

    Git关联远程仓库可以使用https协议或者ssh协议. [特点/优缺点] ssh: 一般使用22端口: 通过先在本地生成SSH密钥对再把公钥上传到服务器: 速度较慢点 https: 一般使用443端 ...

  9. ssh秘钥交换详解与实现 diffie-hellman-group-exchange-sha

    ssh的DH秘钥交换是一套复合几种算法的秘钥交换算法.在RFC4419中称为diffie-hellman-groupX-exchange-shaX 的算法(也有另一种单纯的 rsaX-shaX 交换算 ...

随机推荐

  1. MVC模式中M,V,C每个代表意义,并简述在Struts中MVC的表现方式。

    解答: MVC是Model-View-Controller 的缩写,Model代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),View 是应用的表示层(由JSP页面产生)Control ...

  2. 对Linux命令进一步学习

    root@wuheng-virtual-machine:/home/wuheng# ls -ltotal 44drwxr-xr-x 2 wuheng wuheng 4096 Mar  3 01:30 ...

  3. apache 一个站点配置多个域名

      <VirtualHost *:80> ServerAdmin i@kuigg.com DocumentRoot /www/kuigg.com ServerName kuigg.com ...

  4. ryu的RESTAPI简介——我主要用于下发和查看流表

    一.Rest API简介 REST即表述性状态传递(RepreSentational State Transfer),是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性. 表 ...

  5. mysql数据库如何设置表名大小写不敏感?

    转自:https://blog.csdn.net/iefreer/article/details/8313839 在跨平台的程序设计中要注意到mysql的一些系统变量在windows和linux上的缺 ...

  6. 表达式求值(java)

    今天去面试,考了这个,短时间没想出来... 太笨了! 后来想用栈和递归做 但是看了网上才知道,可以将中缀表达式转为后缀表达式,就极其方便了. import java.util.Scanner; imp ...

  7. 《JAVA多线程编程核心技术》 笔记:第五章:定时器Timer

    一.定时器Timer的使用 1.1 方法schedule(TimerTask task, Date time) 是否过期 执行说明 开始执行时间 time>当前时间(未过期) 在time到达时执 ...

  8. Storm 架构图

    画的丑,勉强看看吧 Nimbus我感觉他就像人的大脑一样! 当客户端给这个人发送了段信息 ,这个人的大脑就接收到这段信息,这个人不简单,是幕后大佬,一般不自己去干活,都是交给下面二当家去执行,当时这个 ...

  9. iOS与导航相关的都在这

    // 设置导航背景图片 (一旦设置背景图片(变为不透明),透明层不起作用) [self.navigationBar setBackgroundImage:[UIImage imageNamed:@&q ...

  10. Spring 框架的JDBC模板技术

    1. 概述 Spring 框架提供了很多持久层的模板类来简化编程; Spring 框架提供的JDBC模板类: JdbcTemplate 类; Spring 框架提供的整合 Hibernate 框架的模 ...