git使用ssh密钥和https两种认证方式汇总(转)

时间:2023-12-16 09:06:50

在版本库的SSH方式和HTTPS方式是不同的,具体来说就是url信息的不同,但是,实际的认证机制也是不同的。当建立了本机密钥之后,使用ssh方式实际上是不需要再次认证的,而https则每次需要输入密码 。《Help.GitHub - SSH key passphrases》里也说了用SSH更方便更安全,不需要去输入长长的密码。

我去看了下repo目录下的.git/config,果然,我的url是HTTPS形式。

1
2
3
[remote "origin"]
fetch = + refs/heads/*:refs/remotes/origin/*
url = https://username@github.com/username/projectname.git

因为远程版本库的url是HTTPS,估计是我git clone的时候用HTTPS链接造成的

所以问题就出在这了,每次都很不方便,都要输入用户名和密码。

为了使用SSH公钥的方式认证,我把config的url改成下面这样

1
2
3
[remote "origin"]
fetch = + refs/heads/*:refs/remotes/origin/*
url = git@github.com:username/projectname.git

这样我git push的时候又可以用SSH公钥认证而不用去输入用户名和密码,不仅方便,而且更安全。

http://www.cnblogs.com/hanxi/archive/2012/07/31/2616628.html

Git有一个工具被称为git config,它允许你获得和设置配置变量;这些变量可以控制Git的外观和操作的各个方面。这些变量可以被存储在三个不同的位置:

  1./etc/gitconfig 文件:包含了适用于系统所有用户和所有库的值。如果你传递参数选项’--system’ 给 git config,它将明确的读和写这个文件。

  2.~/.gitconfig 文件 :具体到你的用户。你可以通过传递--global 选项使Git 读或写这个特定的文件。

  3.位于git目录的config文件 (也就是 .git/config) :无论你当前在用的库是什么,特定指向该单一的库。每个级别重写前一个级别的值。因此,在.git/config中的值覆盖了在/etc/gitconfig中的同一个值。

  在Windows系统中,Git在$HOME目录中查找.gitconfig文件(对大多数人来说,位于C:\Documents and Settings\$USER下)。它也会查找/etc/gitconfig,尽管它是相对于Msys 根目录的。这可能是你在Windows中运行安装程序时决定安装Git的任何地方。

二.你的标识(Your Identity)

2.1 当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中:

  $ git config --global user.name "John Doe"

  $ git config --global user.email johndoe@example.com

  重申一遍,你只需要做一次这个设置。如果你传递了 --global 选项,因为Git将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要--global选项。

2.2 你的编辑器(Your Editor)

  现在,你的标识已经设置,你可以配置你的缺省文本编辑器,Git在需要你输入一些消息时会使用该文本编辑器。缺省情况下,Git使用你的系统的缺省编辑器,这通常可能是vi 或者 vim。如果你想使用一个不同的文本编辑器,例如Emacs,你可以做如下操作:

  $ git config --global core.editor emacs

2.3 你的比较工具(Your Diff Tool)

  另外一个你可能需要配置的有用的选项是缺省的比较工具它用来解决合并时的冲突。例如,你想使用vimdiff:

  $ git config --global merge.tool vimdiff

  Git可以接受kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, 和 opendiff作为有效的合并工具。你也可以设置一个客户化的工具;查看第7章获得更多关于此的信息。

2.4 检查你的设置(Checking Your Settings)

  如果你想检查你的设置,你可以使用 git config --list 命令来列出Git可以在该处找到的所有的设置:

  $ git config --list

  user.name=Scott Chacon

  user.email=schacon@gmail.com

  color.status=auto

  color.branch=auto

  color.interactive=auto

  color.diff=auto

  ...

  你可能会看到一个关键字出现多次,这是因为Git从不同的文件中(例如:/etc/gitconfig以及~/.gitconfig)读取相同的关键字。 在这种情况下,对每个唯一的关键字,Git使用最后的那个值。

  你也可以查看Git认为的一个特定的关键字目前的值,使用如下命令 git config {key}:

  $ git config user.name

  Scott Chacon

2.5 获取帮助(Getting help)

  如果当你在使用Git时需要帮助,有三种方法可以获得任何git命令的手册页(manpage)帮助信息:

  $ git help <verb>

  $ git <verb> --help

  $ man git-<verb>

  例如,你可以运行如下命令获取对config命令的手册页帮助:

  $ git help config

设置 git status的颜色:git config --global color.status auto

http://www.cnblogs.com/wanqieddy/archive/2012/08/03/2621027.html

Git有两个配置文件:

(1)全局的,在当前用户的home目录的.gitconfig文件。echo %userprofile%可以查看windows当前用户目录,linux在/home/当前用户/下,或使用cd 回车即可到达
(2)特定git仓库的配置文件:.git/config

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。

至此,OK。

你可以用git fetch, git pull , git push, 现在进行远程操作,应该就不需要输入密码那么烦了。

http://blog.csdn.net/wfdtxz/article/details/8678982