解决git本地多ssh key的问题

最近手上一个项目需要使用到一台服务器作为专用的部署服务器,在实施过程中遇到了一些问题,具体如下:

1. 服务器的ssh默认端口和项目git仓库的ssh端口不一致
2. 部署需要使用项目提供的ssh key,不能使用服务器本身的默认ssh key

这些问题都被顺利解决了,这里特记录一下,防止遗忘。



针对上述问题,下面主要从这三个点来记录解决方案。

  1. 如何生成ssh key
  2. 如何使用特定ssh端口从git仓库拉取项目
  3. 如何使用特定密钥文件从git仓库拉取项目

一、生成 ssh key

系统默认的ssh key存放在如下目录:

[[email protected] ~]# cd ~/.ssh/
[[email protected] .ssh]# ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts

我们将新建.git目录,用来存放git相关部署key的公私钥。

[[email protected] .ssh]# mkdir ~/.git[[email protected] .ssh]# ssh-keygen -t rsa -f ~/.git/pub_coding.id_rsa -C "[email protected]"Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):  # 回车Enter same passphrase again:                 # 回车Your identification has been saved in /root/.git/pub_coding.id_rsa.
Your public key has been saved in /root/.git/pub_coding.id_rsa.pub.
The key fingerprint is:b1:30:9c:9c:24:78:54:1e:b1:bb:d9:65:3a:44:8c:3b [email protected]
The key‘s randomart image is:
+--[ RSA 2048]----+
|   oo.=.         |
|  . .* B         |
|   .  @ +        |
|       * o       |
|      E S o      |
|       * +       |
|      o +        |
|         .       |
|                 |
+-----------------+
[[email protected] .ssh]# ls ~/.git/
pub_coding.id_rsa  pub_coding.id_rsa.pub

通过上述操作,在~/.git目录下生成了2个文件,其中pub_coding.id_rsa为私钥,pub_coding.id_rsa.pub为公钥。
我们需要将公钥添加到相关版本控制软件的账户下。


二、使用特定ssh端口从git仓库拉取项目

这种情况一般会发生在我们本地的ssh默认端口和git仓库的ssh端口不一致时。比如,我们本地使用了57832作为ssh默认端口,而git仓库使用了22作为ssh默认端口。
这种情况,对使用https方式访问git仓库的用户是不会受到影响的,但是会导致使用ssh方式访问git仓库的用户拉取项目使用。

针对这个问题,这里提供两种解决方法:

  1. 使用ssh://的方式拉取项目

    [[email protected] .ssh]# git clone ssh://[email protected]:端口号/用户名/项目名称.git

    我们可以在上面的命令中去指明对应的ssh的端口号。

  2. 使用ssh config配置来自定义端口
    这种方式,我们将放到管理多ssh key的段落中去做介绍。

三、使用特定密钥文件从git仓库拉取项目

1、介绍

这个问题,换句话说就是如何git如何使用多ssh key。针对这种多ssh key的管理,我们目前主要通过定义ssh的客户端配置文件来实现。
我们可以在ssh的客户端配置文件文件中定义服务器别名、服务器地址以及针对特定服务器使用的一些专用连接配置信息。
有关ssh的客户端配置文件,我们可以通过man config来获取相关的介绍,这里简单放一部分介绍。

NAME
     ssh_config - OpenSSH SSH client configuration files

SYNOPSIS
     ~/.ssh/config
     /etc/ssh/ssh_config

DESCRIPTION
     ssh(1) obtains configuration data from the following sources in the following order:           1.   command-line options           2.   user’s configuration file (~/.ssh/config)           3.   system-wide configuration file (/etc/ssh/ssh_config)

从描述中,我们可以看到,有关ssh的客户端配置文件有2个,分别是~/.ssh/config/etc/ssh/ssh_config。他们一个是用户范围的配置,一个是系统范围的配置。
由于我们的操作要限定在用户范围,因此要使用~/.ssh/config文件。

2、配置

需要注意的是,~/.ssh/config文件默认不存在,需要用户自己创建。
样例文件:

[[email protected] ~]# touch ~/.ssh/config
[[email protected] ~]# cat ~/.ssh/config 
# github key
Host git-github
    Port 22
    User git    
    HostName git.github.com    
    PreferredAuthentications publickey    
    IdentityFile ~/.git/pub_github.id_rsa

# coding key
Host git-coding    
    Port 22
    User git    
    HostName git.coding.net    
    PreferredAuthentications publickey    
    IdentityFile ~/.git/pub_coding.id_rsa

下面对上述配置文件中使用到的配置字段信息进行简单解释。

Host
    它涵盖了下面一个段的配置,我们可以通过他来替代将要连接的服务器地址。
    这里可以使用任意字段或通配符。
    当ssh的时候如果服务器地址能匹配上这里Host指定的值,则Host下面指定的HostName将被作为最终的服务器地址使用,并且将使用该Host字段下面配置的所有自定义配置来覆盖默认的`/etc/ssh/ssh_config`配置信息。
Port
    自定义的端口
User
    自定义的用户名
HostName
    真正连接的服务器地址
PreferredAuthentications
    指定优先使用哪种方式验证,支持密码和秘钥验证方式
IdentityFile
    指定本次连接使用的密钥文件

通过上面设置之后,我们就可以使用多ssh key来连接不同的git仓库了

3、连接测试

我们可以使用ssh来进行连接验证测试。

[[email protected] .ssh]# ssh -T [email protected]
Hello 用户名 You‘ve connected to Coding.net by SSH successfully!
[[email protected] .ssh]# ssh -T [email protected]
Hi 用户名! You‘ve successfully authenticated, but GitHub does not provide shell access.

4、拉取项目设置

通过上述设置之后,我们就可以通过不同的Host来针对不同的git仓库和git项目使用不同的ssh key了。但是,这里还需要注意的是,通常情况下我们从git仓库拉取的项目ssh访问地址,类似这种[email protected]仓库地址:用户名/项目名.git。我们一定要把这里的git仓库地址替换为我们ssh config里面设定的Host。
范例:

[[email protected] .ssh]# git clone [email protected]:用户名/项目名.git
替换为如下
[[email protected] .ssh]# git clone [email protected]_github:用户名/项目名.git

到这里就大功告成了!

参考链接:
多个ssh key的管理
git生成ssh key及本地解决多个ssh key的问题
ssh配置讲解大全
ssh_config 文件配置详解
ssh config配置更新

时间: 2024-10-09 23:30:22

解决git本地多ssh key的问题的相关文章

关于 git 本地创建 SSH Key 遇到的一点问题(①file to save the key & ②the authenticity of host...)

背景 由于想测试一下 SSH Key 创建的路径(.ssh 目录路径)对于不同位置 git 项目是否有效. 比如,.ssh 默认在 C:\[users]\[username] 目录下,而项目 project 在 D:\ 目录.测试结果是依然有效,即 .ssh 在 C:\[users]\[username] 目录下时,在其他位置 push 时无需进行密码认证(测试时项目以 SSH clone). PS:测试前已经将远程仓库托管平台公钥配置好. 事件1(file to save the key) 在

Git安装及SSH Key管理之Windows篇

一.安装环境 1.本机系统:Windows 10 Pro(64位)2.Git版本:Git-2.11.0-64-bit.exe(64位) 二.Git安装 去官网下载完后一路下一步完成安装,如下图: 安装完后先在系统环境变量中看下是否配置 然后在桌面右击鼠标,选择Git bash here,然后输入下面代码: git --version #验证git是否安装成功,输出版本号就代表安装成功 如下图: 安装完成有配置一下全局的用户名和邮箱,输入如下命令: git config --global user

Git安装及SSH Key管理之Mac篇

1.下载git客户端,下载地址为:https://git-scm.com/download/mac 2.打开安装包,可以看到此时的界面为: 我们需要把.pkg的安装包安装到系统当中.我双击了安装包之后,结果无法安装成功.界面为: 这里是一个坑,虽然是很简单的问题的,但是对于新手而言有时候还是头疼的.后来,在网上终于找到原因,由于这个需要权限,所以直接点击安装是无法成功的.方式是按住control键之后,再点击pkg文件.这个时候会弹出安装程序的界面.如 所示.然后选择打开,就可以完成安装了. 3

【Git学习】SSH key 和 Git 多账户配置

转载请注明:http://blog.csdn.net/lrs123123/article/details/46917981 可能很多人用Git会遇到这样一个问题,在公司电脑使用了Git,然后回到家之后发现git用不了 原因很简单,你需要配置你这台电脑的git秘钥,这也是本篇要介绍的内容 本篇讲的是通过ssh去拿git项目,所以我们需要去配置SSH 秘钥 首先,来到命令行,输入git ,出现像如下界面,说明你的git环境正确 接下来,我们先告诉Git我们的名字还有邮箱  自报家门 接下来,我们需要

git - Mac生成SSH key

步骤1.检查是否已经存在SSH Key 打开电脑终端,输入以下命令: ls -al ~/.ssh 会出现两种情况 步骤2. 生成/设置SSH Key 继续上一步可能出现的情况 (1)情况一: 终端出现文件id_rsa.pub 或 id_dsa.pub,则表示该电脑已经存在SSH Key,此时可继续输入命令: //将公钥放到剪切板 pbcopy < ~/.ssh/id_rsa.pub 这样你需要的SSH Key 就已经复制到粘贴板上了,然后进行步骤3 (2)情况二: 终端未出现id_rsa.pub

本地生成 ssh key

1. 配置Git用户名和邮箱 git config user.name "用户名" git config user.email "邮箱" 2. 生成ssh key     ssh-keygen -t rsa -C "邮箱" 如果报  fatal: not in a git directory, 是因为没有将当前目录作为git目录. 先执行命令 git init .在执行上面的 如果使用的是GitLab, 将 生成的id_rsa 复制到 setti

【转】Mac本地生成SSH Key 的方法

1. 查看秘钥是否存在 打开终端查看是否已经存在SSH密钥:cd ~/.ssh 如果没有密钥则不会有此文件夹,有则备份删除,   也可以直接删除, 2.生成新的秘钥, 命令如下 $ssh-keygen -t rsa -C "[email protected]" 你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,因为这个Key仅仅用于简单的服务,所以也无需设置密码. 完成后会有如下显示 Enter passphrase (empty for no passphrase)

Git bash 生产 ssh key

ssh-keygen -t rsa -C "[email protected]"

Mac Android studio提交本地项目到Github 已经配置 SSH KEY

注册账号 https://github.com 在本地配置ssh key秘钥 配置好之后这里需要它 开始本地配置ssh key,首先查看本地电脑是否有配置过ssh,进入终端 敲入$ defaults write com.apple.finder AppleShowAllFiles -bool true ( 显示隐藏文件(需要重新运行Finder),因为.ssh是隐藏文件). 在桌面菜单在查看是否有这个文件 .ssh 的隐藏文件,有的话个人建议删除. 现在开始在本地配置ssh key mkdir