如何生成SSH Key-使用GitLab

本文详细介绍如何在本地计算机上生成SSHKey,并将其配置到GitLab等远程代码仓库,实现安全的身份验证。同时,讲解了如何配置多个SSHKey,以便在不同平台如公司GitLab、GitHub、OSChina等之间进行无缝切换。

1.检查是否已经存在SSH Key

打开电脑终端,输入以下命令:ls -al ~/.ssh

2.会出现两种情况:

(1)终端出现文件id_rsa.pub 或 id_dsa.pub,则表示该电脑已经存在SSH Key,此时可继续输入命令:

//将公钥放到剪切板

pbcopy < ~/.ssh/id_rsa.pub

这样你需要的SSH Key 就已经复制到粘贴板上了,然后进行步骤3

(2)终端未出现id_rsa.pub 或 id_dsa.pub文件,表示该电脑还没有配置SSH Key,此时需要输入命令:

ssh-keygen -t rsa -C "your_full_name@xxxxx.com"

(注意,这里的 your_full_name@xxxxx.com 是你自己的公司邮箱) 默认会在相应路径下(/your_home_path)生成id_rsa和id_rsa.pub两个文件,此时终端会显示:

Generating public/private rsa key pair.

Enter file in which to save the key (/your_home_path/.ssh/id_rsa):

连续回车即可,也可能会让你输入密码,密码就是你的开机密码

此时再输入命令:ls -al ~/.ssh 就会出现id_rsa.pub 和 id_dsa.pub两个文件,然后重复情况(1)的步骤即输入以下命令再进行步骤3即可:

pbcopy < ~/.ssh/id_rsa.pub

3.将SSH Key添加到GitLab中

打开GitLab, 登录,找到左边栏有一个的按钮,点击“ADD SSH KEY”按钮添加,将已经获得的SSH Key粘贴到“Key”,下边的标题可以随便取,点击加入项目,这样就保持了本地与服务器端的联系.



二.本地配置多个 SSH Key

大多数时候,我们的机器上会有很多的git host,比如公司gitlab、github、oschina等,那我们就需要在本地配置多个ssh key,使得不同的host能使用不同的ssh key ,做法如下(以公司gitlab和github为例):

  1. 为公司生成一对秘钥ssh key

    ssh-keygen -t rsa -C 'yourEmail@xx.com' -f ~/.ssh/gitlab-rsa复制代码
  2. 为github生成一对秘钥ssh key

    ssh-keygen -t rsa -C 'yourEmail2@xx.com' -f ~/.ssh/github-rsa复制代码
  3. 按照上面的步骤分别往gitlab和github上添加生成的公钥gitlab_id-rsa.pub和github_id-rsa.pub
  4. 将ssh-key添加到ssh-agent

上面这一步我们已经创建好了 ssh-key,此时还需要将新的 ssh-key 添加到ssh agent ,因为默认只读 id_rsa,首先查看一下已经添加进去的 ssh-key,当出现下面 这种情况是说明 ssh agent 里面并没有把我们新生产的 ssh-key添加进去

ssh-add -l
The agent has no identities.复制代码

可以选择把我们生成的 ssh-key 添加进去,也可以指定添加

//全部添加
ssh-add  

//指定添加(可以切换到.ssh下添加,也可以直接指定路径添加)
➜  .ssh ssh-add id_rsa_test_github                   
Enter passphrase for id_rsa_test_github: 
Identity added: id_rsa_test_github (id_rsa_test_github)复制代码

这时输入下面指令就能看见我们添加进去的 ssh-key

ssh-add -l
复制代码
获取公钥内容的另一种方法:
.ssh  cat id_rsa_test_github.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCoG4Tmo8wF3P9/Vdtsm220jE6dNu9iG8jtranZccTO4hsyck4cxO02AniYr7JaPsL91sLCODEhnEmI+YWLSXFIaPbXVyVEa3PHc+VdNjgkkm/unkoBKsMLViP0vOUtU2OSYAdlWAoXpAyzPV17W0ratFVkHTjr1+G4NHOCo/qKbozPaHH9gaed7RB1Kx8swPkt0HGv/o9NQh7psmNPaanqMlTqA0uVS47LbCF5+C0CAgj2bFGEHtKy8cw6M+7OHBaTq90d740IBNca1fIvIDTnjsSV26iOiluQ+jVfsHuHmaAuw7ez2z/84sb+r5RtP5kjMemlw2D+/FmbFqx8qXDt youremail@email.com复制代码


转载于:https://juejin.im/post/5cd389b3f265da03b11f5078

<think>好的,我现在需要回答用户关于`ssh-keyscan gitlab.com >> ~/.ssh/known_hosts`命令的作用及原理,还要结合提供的引用内容。首先,我得理解用户的问题核心在哪里。 用户提到ssh-keyscan的作用以及它和GitLab SSH连接的关系。根据引用资料,ssh-keyscan是用来收集远程主机的公钥,并帮助构建known_hosts文件。而GitLab使用SSH连接时,客户端需要验证服务器身份,这通常通过known_hosts中的公钥来实现。 首先,需要解释ssh-keyscan命令的基本功能。引用[2]说明ssh-keyscan用于收集多个主机的公钥,帮助构建和验证known_hosts文件。所以当用户运行这个命令时,它会主动获取gitlab.com的SSH公钥,并将其添加到本地的known_hosts文件中。 然后,为什么需要这样做呢?引用[3]提到,known_hosts记录了访问过的主机的公钥,用于下次连接时验证,防止中间人攻击。如果用户第一次连接GitLab服务器,或者known_hosts中没有对应的公钥,SSH客户端会询问是否信任,导致自动化脚本中断。通过预先将公钥添加到known_hosts,可以避免这种手动确认,确保连接自动进行。 接下来,命令的具体部分:`ssh-keyscan gitlab.com`会输出GitLab服务器的公钥,然后通过`>>`追加到用户的~/.ssh/known_hosts文件中。这样,当用户后续使用SSH连接GitLab时,客户端会检查known_hosts,找到对应的公钥,验证服务器身份,从而建立安全连接。 可能还需要提到,如果服务器的公钥变更(比如GitLab更换了密钥),known_hosts中的旧记录会导致警告,这时候可能需要使用引用[1]中的方法刷新公钥,比如先用`ssh-keygen -R gitlab.com`删除旧记录,再运行ssh-keyscan重新获取。 总结一下,这个命令的作用是提前获取并信任GitLabSSH公钥,确保后续连接时自动验证,避免交互式提示,提高自动化流程的可靠性。原理是通过收集公钥并写入known_hosts,让SSH客户端能验证服务器身份,防止中间人攻击。</think>### `ssh-keyscan gitlab.com >> ~/.ssh/known_hosts` 的作用及原理 #### 作用说明 1. **主动获取 GitLab 的公钥** 命令 `ssh-keyscan gitlab.com` 会向 GitLab 服务器发起请求,**收集其 SSH 服务端的公钥**(包括 RSA、ECDSA 等类型)。这些公钥用于验证服务器身份,防止中间人攻击[^3]。 2. **写入本地信任列表** 通过 `>> ~/.ssh/known_hosts` 将获取的公钥追加到用户的 `known_hosts` 文件中。此文件记录了所有受信任的远程主机公钥,后续 SSH 连接时会自动比对公钥是否匹配。 3. **避免首次连接的交互确认** 若 `known_hosts` 中无 GitLab 公钥,首次连接时会提示用户手动确认(如下所示),中断自动化流程。提前写入公钥可跳过此步骤: ```bash The authenticity of host 'gitlab.com (xxx.xxx.xxx.xxx)' can't be established. RSA key fingerprint is SHA256:xxxxx. Are you sure you want to continue connecting (yes/no)? ``` #### 原理解析 - **SSH 连接验证流程** 当用户通过 SSH 连接 GitLab 时,客户端会检查 `~/.ssh/known_hosts` 是否包含该主机的公钥。若存在且匹配,则直接建立连接;若不匹配会发出警告(提示潜在风险);若不存在则会要求用户确认。 - **`ssh-keyscan` 的作用机制** 该工具直接通过 DNS 查询和网络请求获取目标主机的公钥,绕过了常规的 SSH 握手流程。其输出格式与 `known_hosts` 兼容,可直接用于预配置信任关系[^2]。 #### 与 GitLab 的关系 - **保障 Git 操作的可靠性** 在 CI/CD 流水线或自动化脚本中,若未预先配置 `known_hosts`,Git 克隆/推送操作可能因交互提示而失败。通过此命令可提前解决依赖问题。 - **应对服务器公钥变更** 若 GitLab 更换服务器密钥(如硬件升级),需更新 `known_hosts`。可先删除旧记录: ```bash ssh-keygen -R gitlab.com # 引用[1]中的方法 ssh-keyscan -H gitlab.com >> ~/.ssh/known_hosts ``` #### 操作示例 ```bash # 1. 获取并写入公钥 ssh-keyscan gitlab.com >> ~/.ssh/known_hosts # 2. 验证连接(无错误提示说明成功) ssh -T git@gitlab.com ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值