SSH密钥是⼀种⽆需密码认证电脑的⽅式。接下来介绍如何⽣成SSH密钥。
在开始之前,请确认已经安装了git客户端。
第⼀步:检查是否已有SSH密钥
⾸先,我们需要检查在你的电脑上是否已经存在了SSH密钥,打开”Git Bash",输⼊”ls -al ~/.ssh”
$ ls -‐al ~/.ssh # Lists the files in your .ssh directory, if they exist
如果你已经有SSH密钥,则将会显⽰出⼀些⽂件列表。默认情况下,公钥⽂件名会是以下 ⼏种:
id_rsa
id_rsa.pub
如果你已经有⼀组成对的公钥和密钥(例如:id_rsa.pub和id_rsa),你可以跳过第⼆步 和第三步。
第⼆步:⽣成新的SSH密钥
1. 在终端输⼊如下指令,请在双引号中,输⼊⾃⼰的邮箱,例 如”asdad@qq.com"
ssh-keygen -t rsa -b 4096 -C "name@***.com" # Creates a new ssh key, using the provided email as a label # Generating public/private rsa key pair.
参数解释:
–b bits 指定要创建的密钥的位数。最小位数为 512 位。通常,2048 位足以满足安全需要。密钥大小超过该值并不会提高安全性,反而会降低速度。缺省值为 2048 位。 –B 显示指定的私钥或公钥文件的 bubblebabble 摘要。 –c 请求更改私钥和公钥文件中的注释。该程序会提示您提供包含私钥的文件、口令短语(如果密钥具有一个口令短语)以及新的注释。 此选项仅适用于 rsa1 (SSHv1) 密钥。 –C comment 提供新注释。 –e 此选项读取 OpenSSH 私钥或公钥文件并将密钥以 "SECSH" 公钥文件格式输出到 stdout。此选项允许导出密钥供其他一些 SSH 实现使用。 –f 指定密钥文件的文件名。 –F 在known_hosts 文件中搜索指定的 hostname,列出找到的任何匹配项。此选项可用于查找散列格式的主机名或地址,还可以与 –H 选项一起使用,以散列格式输出找到的密钥。 –H 对 known_hosts 文件执行散列计算。此选项使用散列形式替换指定文件内的所有主机名和地址。原始内容将移动到后缀为 .old 的文件中。这些散列值通常由 ssh 和 sshd 使用,即使文件内容被公开,这些散列值也并不会透露可识别的信息。此选项不会修改现有的散列主机名,因此可以放心地用于同时包含散列名称和非散列名称的文件。 –i 此选项以 SSH2 兼容格式读取未加密的私钥(或公钥)文件并将 OpenSSH 兼容的私钥(或公钥)输出到 stdout。ssh-keygen 还可读取 “SECSH” 公钥文件格式。此选项允许从其他一些 SSH 实现中导入密钥。 –l 显示指定的私钥或公钥文件的指纹。 –N new_passphrase 提供新口令短语。 –p 请求更改私钥文件的口令短语,而不创建新私钥。该程序会提示您提供包含私钥的文件、旧口令短语,并两次提示您输入新口令短语。 –P passphrase 提供(旧)口令短语。 –q 退出 ssh-keygen。 –t type 指定用于生成密钥的算法,其中 type 是 rsa、dsa 和 rsa1 中的一种。rsa1 类型仅用于 SSHv1 协议。 –R hostname 从 known_hosts 文件中删除属于 hostname 的所有密钥。此选项可用于删除散列主机。请参见 –H。 –x 已过时。已被 –e 选项取代。 –X 已过时。已被 –i 选项取代。 –y 此选项读取 OpenSSH 私钥格式文件并将 OpenSSH 公钥输出到 stdout。
2. 强烈建议使⽤默认路径来保存公钥与密钥⽂件,所以,当提⽰您"Enter a file in which to save the key”时,点击Enter键即可。
Enter file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]
3. 您会被要求输⼊⼀个密码,建议您可以不输⼊。直接点击Enter键继续。
Enter passphrase (empty for no passphrase): [Type a passphrase] Enter same passphrase again: [Type passphrase again]
4. 接下来控制台会打印⼀些验证信息,类似这个样⼦:
+---[RSA 4096]----+ | .o o | | o.+.* | | o oo+ . | | . .. | | E.. .S | |.++*o=o. | |++BBB+ | |.*B=*.. | |o*B+ o.. | +----[SHA256]-----+
第三步:查看公钥⽂件
执⾏如下命令
$ cat ~/.ssh/id_rsa.pub
第四步:Gogs添加公钥
配置完成.
21-8-1:
虽然一个秘钥可以应对不同的网站, 但是有时候我们为了安全,不同的网站会使用不同的秘钥, 如何解决这个问题呢?
在 ~/.ssh/config 添加如下配置:
# 配置github.com Host github.com HostName github.com IdentityFile C:\\Users\\purehol\\.ssh\\rsa_github PreferredAuthentications publickey User git # 配置gitee.com Host gitee.com HostName gitee.com IdentityFile C:\\Users\\purehol\\.ssh\\rsa_gitee PreferredAuthentications publickey User git
其中:
(1)Host的名字可以取为自己喜欢的名字,不过这个会影响git相关命令,例如:
Host abc这样定义的话,命令如下,即git@后面紧跟的名字改为abc
git clone git@abc:purehol/demo.git
(2)HostName 这个是真实的域名地址
(3)IdentityFile 这里是id_rsa的路径
(4)PreferredAuthentications 配置登录时用什么权限认证--可设为publickey,password publickey,keyboard-interactive等
(5)User 配置使用用户名
git的提交项目 :
"git add ." 来添加所有到暂存区(.gitnore文件忽略的除外)
"git commit -m "first commit" " 来正式更改,这个时候会提示没有身份信息,这个时候有两种方式来添加自己的身份信息:
(1)全局身份信息,以后所有git都可以用此账户
git config --global user.name "abc" git config --global user.email "abc@gmail.com"
(2)局部身份信息,每提交一个 repositories都要在项目内设置
git config user.name "abc" git config user.email "abc@gmail.com"
另外,查看git账户和邮箱使用:
git config user.name //回车后就显示用户名 git config user.email //回车后显示邮箱
修改邮箱和用户名:
git config --global user.name "username" git config --global user.email "email"
开始push到远程
//gitee这个可以改,尤其适用于多个远程项目的时候, 给每个设置不同的名字 git remote add gitee git@gitee.com:abc/test.git //-u命令仅用于第一次提交 -u 是把本地的master和远程仓库的master分支绑定了(若有其他分支也可绑定其他分支),下次再push就不需要写分支名了 git push -u gitee master
假如 git remote 之后 git push 之前我们想更改提交:
git remote -v //查看远程库信息 git remote rm gitee //删除名为gitee的待提交项目
git 换行符LF与CRLF转换问题
git config --global core.autocrlf false
git config --global core.safecrlf true
含义:
AutoCRLF
#提交时转换为LF,检出时转换为CRLF
git config --global core.autocrlf true
#提交时转换为LF,检出时不转换
git config --global core.autocrlf input
#提交检出均不转换
git config --global core.autocrlf false
SafeCRLF
#拒绝提交包含混合换行符的文件
git config --global core.safecrlf true
#允许提交包含混合换行符的文件
git config --global core.safecrlf false
#提交包含混合换行符的文件时给出警告
git config --global core.safecrlf warn
~在Windows代表的是C:\Users\\
所以~/.ssh即C:\Users\C\.ssh(我用户名是C)