## ssh key 是用来干嘛的

用来免输密码登录远程主机的。ssh key含私钥和公钥,私钥和公钥是相对应的,所以称密钥对。将公钥添加的目标主机的~/.ssh/authorized_keys文件中,当前主机就成为可信任的主机,下次使用ssh登录时,就不用输入密码了。

--------------------------------

# Mac系统

## Mac系统生成ssh key
生成单个ssh参考:
[【CSDN】Gitlab配置ssh连接]()
需要生成多个不同的ssh参考:

两篇对照着看,会更容易理解。以下内容是对这两篇文章的整理和补充。

扩展阅读:

[是否必须每次添加ssh-add]()
 [ssh-add命令](http://man.linuxde.net/ssh-add)

生成ssh key操作是通过Mac的终端完成的。为避免歧义,下面的Mac终端命令行中,使用“【】”(中文方括号)标记需要用户自定义的内容,你需要用自己的内容将方括号及方括号里的示范内容替换掉。

### 用到的Mac终端命令
* 进入目录:cd 【目录名】
* 进入用户根目录:cd ~
* 返回上一个目录:cd ..
* 列出当前目录下的文件及文件夹,不包括隐藏的文件及文件夹:ls
* 列出当前目录下的所有文件及文件夹,包括隐藏得文件及文件夹:ls -al
* 删除空目录:rmdir 【目录名】
* 删除非空目录:rm -r 【目录名】
* 删除文件:rm 【文件名】
* 复制文件里的内容到剪切板:pbcopy < 【文件名】
* 创建空文件:touch 【文件名.扩展名】
* 打开文件或文件夹:open 【文件名.扩展名或文件夹名称】

### 查看ssh密钥
通常ssh密钥都保存在用~/.ssh目录中,如果你不确定之前是否生成过

### 生成ssh key
#### 1. 生成密钥对
 在终端中输入:
 ```bash
 ssh-keygen -t rsa -C "【邮箱】"
 ```
 或者:
 ```bash
 ssh-keygen -t rsa
 ```
 #### 2. 给密钥对命名
 回车,终端会显示以下文字:
 ```
 Enter file in which to save the key (/Users/bmbm/.ssh/id_rsa):


```
这是提示你输入保存的全路径(即:目录/文件名.扩展名),如果不输入直接回车,则默认以“id_rsa”命名密钥对文件,并保存在“.ssh”目录下。括号中即是默认保存的全路径。

如果原来已经有“id_rsa”密钥对,则会将其覆盖。如果没有,则“.ssh”目录下会产生两个文件,一个是私钥文件“id_rsa”,一个是公钥文件“id_rsa.pub”。你可以使用`ls`命令查看。

如果不想覆盖之前的密钥对,或者有多个账户要配置,可以输入你想要的文件名,如:
```

Enter file in which to save the key (/Users/bmbm/.ssh/id_rsa): /Users/bmbm/.ssh/id_rsa_github


```
回车,则“.ssh”目录下就会生成密钥对文件“id_rsa_github”和“id_rsa_github.pub”。

回车后终端会提示输入密码,一般不需要,否则每次使用ssh都要输密码。所以给密钥对命名步骤完成后,再两次回车,跳过输入密码的步骤。

#### 3. 将私钥添加到ssh-agent中
见扩展阅读

[ssh-add命令](http://man.linuxde.net/ssh-add)
 [是否必须每次添加ssh-add]()如果密钥对的文件名是默认的话可以忽略这一个步骤。(或者在“.ssh”目录中配置config文件也可以忽略这一步骤?)
 ```
 ssh-add 【~/.ssh/id_rsa_github】


```

#### 4. 添加ssh配置文件
多个账户时使用,只有一个账户且使用默认文件名的话忽略这一步骤。
进入“.ssh”目录,使用`touch config`命令创建一个文件名为“config”的空文件,使用`open config`打开该文件,将类似于下方的配置内容写入其中。(Window系统是创建“config.config”文件)
```

# gitlab
 Host 【hostAlias1//主机别名】
     HostName 【git.you.com //这里填你们公司的git网址即可】
     PreferredAuthentications publickey
     IdentityFile 【~/.ssh/id_rsa_gitlab//私钥全路径】
     User 【git//用户名】
 # github
     Host 【hostAlias2//主机别名】
     HostName github.com
     PreferredAuthentications publickey
     IdentityFile 【~/.ssh/id_rsa_github//私钥全路径】
     User 【git//用户名】


```

### 5. 将公钥粘贴到git服务器中
打开公钥文件(扩展名为“.pub”的文件),复制里面的内容,复制到git服务器中。因为“.ssh”是隐藏文件夹,直接从Finder中可能不好找,可以使用终端执行`open ~/.ssh/id_rsa.pub`命令直接打开,或者用`pbcopy < ~/.ssh/id_rsa.pub`命令直接复制到剪切板。

### 6. 测试

使用以下命令验证:
```
ssh -T git@【主机别名,如果没配置主机别名,则输入主机地址,如“github.com”】
```

如果要显示日志,则使用以下命令:
```
ssh -vT git@【主机别名,如果没配置主机别名,则输入主机地址,如“github.com”】
```
第一次连接时,会询问是否信任主机,确认后输入yes。
根据返回的信息判断是否配置成功,类似于“Welcome to GitLab, xxx!”,则表明配置成功。

## 在不同本地仓库中使用不同账户
如果之前已经设置了全局的用户名和密码的话,需要重置以下:

```
 git config --global --unset user.name
 git config --global --unset user.email
 ```
 再在不同的本地仓库下执行以下命令,设置局部用户名和邮箱:
 ```
 git config user.name "【用户名】"
 git config user.email "【邮箱】"
 ```
 如果同一个git服务器的主机设置了不同别名,在项目的仓库中要将别名设置到项目的远程地址中:
 ```
 git remote set-url origin git@【hostAlias1】:【root/helloworld】
 ``` ## Mac配置ssh示例
 ```
 banmabanmadeMacBook-Pro:~ bmbm$ ssh-keygen -t rsa -C "xxxx@xxxx.com"
 Generating public/private rsa key pair.
 Enter file in which to save the key (/Users/bmbm/.ssh/id_rsa): 
 Created directory '/Users/bmbm/.ssh'.
 Enter passphrase (empty for no passphrase): 
 Enter same passphrase again: 
 Your identification has been saved in /Users/bmbm/.ssh/id_rsa.
 Your public key has been saved in /Users/bmbm/.ssh/id_rsa.pub.
 The key fingerprint is:
 。。。。。。
 The key's randomart image is:
 。。。。。。
 banmabanmadeMacBook-Pro:~ bmbm$ cd ~/.ssh
 banmabanmadeMacBook-Pro:.ssh bmbm$ ls
 id_rsa    id_rsa.pub
 banmabanmadeMacBook-Pro:.ssh bmbm$ pbcopy < ~/.ssh/id_rsa.pub
 banmabanmadeMacBook-Pro:.ssh bmbm$ ssh -T git@xxxx.com
 ```------------------------------------

# Windows系统
Windows系统生成ssh-key的步骤和Mac系统的思路是一样的,只是命令行有所差别,比如进入用户根目录不能用“cd ~”命令。Windows使用的是dos命令,Mac使用的是bash命令,Windows的目录是用“\”符号隔开,Mac的目录是用“/”符号隔开。具体过程不再赘述。

## ssh-add命令
一般远程仓库连接不上的原因是还没将密钥文件加载到缓冲中,特别是密钥文件名不是默认文件名的情况下,更需要使用ssh-add命令。我使用dos命令行执行“ssh-add”命令总是失败,于是用bash命令行执行。以下按照bash命令行的方式说明。

### 方式一
确保已经配置了git的环境变量(即将git安装目录下的bin文件夹路径——含bin本身,配置到环境变量中),打开cmd.exe程序,执行“bash”命令,或“bash --login -i”命令,即挂起了git hash 程序,然后执行以下bash命令行:

```bash
 ssh-agent
 ssh-add ~/.ssh/【id_rsa】
 ```### 方式二
 直接打开git bash程序,执行以下bash命令行:
 ```bash
 ssh-agent
 ssh-add ~/.ssh/【id_rsa】
 ```