向 Git 服务器添加 SSH 公钥

摘要:
在网上很少找到文章有提到如何将自己的Git远程仓库配置成可以通过SSH公钥方式认证的,而几乎清一色都是告诉你怎么通过web界面向GitHub添加SSH公钥。对于第一种方式肯定是很不方便的,那么怎么才能使Git服务器支持SSH公钥认证呢?下文以Ubuntu系统为例,讲解如何使用SSH公钥认证方式访问Git服务器。步骤一,从客户端获得SSH公钥为了使客户端可以向Git服务器提供SSH公钥,首先要确认客户端拥有公钥。

在网上很少找到文章有提到如何将自己的 Git 远程仓库配置成可以通过 SSH 公钥方式认证的,而几乎清一色都是告诉你怎么通过 web 界面向 GitHub 添加 SSH 公钥。LZ 在网上查找了一番,终于找到了办法。

对于不想看 LZ 下面罗嗦了一大堆的园友,LZ 先把结论放在这里,直接拿去用就是了。

把本地用户的 ~/.ssh/id_rsa.pub 的内容追加到 Git 服务器仓库所属用户的 ~/.ssh/authorized_keys 文件的末尾即可。

================怎么刚一上来就出现了==分==割==线===================================

下面请耐心听 LZ 罗嗦。

在访问 Git 仓库的时候,一般有两种认证方式:

1.通过密码进行认证:每次从远程库更新或推送到远程库时都需要输入密码;

2.通过 SSH 公钥认证:服务器会自动校验客户端的私钥,无需用户手动输入密码。

对于第一种方式肯定是很不方便的,那么怎么才能使 Git 服务器支持 SSH 公钥认证呢?

下文以 Ubuntu 系统为例,讲解如何使用 SSH 公钥认证方式访问 Git 服务器。

步骤一,从客户端获得 SSH 公钥

为了使客户端可以向 Git 服务器提供 SSH 公钥,首先要确认客户端拥有公钥。SSH 的密钥存储在 ~/.ssh/ 目录下,下面我们查看一下这里面都有哪些文件:

[user@local ~]$ ls .ssh/
id_rsa  id_rsa_osc  id_rsa_osc.pub  id_rsa.pub  known_hosts
[user@local ~]$ 

上面的 xxx 和 xxx.pub 分别是一个 SSH 私钥和公钥。

这里id_rsa(私钥) 和id_rsa.pub(公钥) 是一对儿,而id_rsa_osc和id_rsa_osc.pub又是一对儿私钥和公钥。由此可见,一个用户是可以拥有多个密钥的,但是这并不影响我们后面对 Git 服务器的配置,使用任何一个公钥都可以。

如果用户没有密钥文件,甚至连 .ssh 目录都没有,那么说明用户还没有创建 SSH 密钥,我们使用 ssh-keygen 命令可以为其生成密钥。

复制代码

[user@local ~]$ ssh-keygen -t RSA -C "user@126.com"
Generating public/private RSA key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
e1:ec:5c:cd:89:8f:83:a2:aa:5d:8a:7f:93:12:90:f4 user@126.com
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
| .               |
|...     .        |
|o  E   o . + .   |
| .      S o +    |
|  .    o o o     |
|   .... + o .    |
| o.o+. .   .     |
|oo=+..           |
+-----------------+
[user@local ~]$

复制代码

-t RSA 参数表示使用 RSA 算法。

-C 参数指定用户的电子邮箱地址。

接下来 ssh-keygen 命令会询问用户密钥文件的存储路径以及密码等,如果不设置密码直接键入回车即可。

密钥文件默认保存在 ~/.ssh/id_rsa 和 ~/.ssh/id_rsa.pub,公钥文件内容类似如下:

复制代码

[user@local ~]$ cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVzaGljR5OjgA3VUPO/C/0eIBBhcUQ9v2glTmim1iJ2nOmqTg1lBUlgQCwaIw6f9qJk6J+ibypzJifnic90dfsItlPLBaiMd+/KqZmJymsPOsB2+aQhGXwbj3StTkA1S3KCbUFSRYj3M1CwCGBLxLSyG/wKS/wUeVXtkwAHfSfR7jzkcB5ZyZY6ioxHsMvkCA7ORPaw5zE4MJNw0K9o25sCrgC5RyPUIcEvEt4lo7weaifhNwp5Ql21lVHKknyTALXqETeAhkYrSgueH54srszYJ3A4l+JvpFhHWC/0lF+lZaWtD/VKzs9HSvyYKAs+ovGZAfZY+AC7Et+MWLtlsmf user@126.com
[user@local ~]$

复制代码

至此,从客户端获得密钥的步骤就完成了,接下来需要把公钥发送个 Git 服务器仓库管理员。

步骤二,搭建 Git 服务器(已有 Git 服务器管理用户的可以跳过此步骤)

为了便于管理,需要在系统中建立一个单独的用户来管理所有的 Git 仓库。

复制代码

[user@local ~]$ sudo adduser git
Adding user `git' ...
Adding new group `git' (1001) ...
Adding new user `git' (1001) with group `git' ...
Creating home directory `/home/git' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for git
Enter the new value, or press ENTER for the default
    Full Name []: git
    Room Number []: 
    Work Phone []: 
    Home Phone []: 
    Other []: 
Is the information correct? [Y/n] y
[user@local ~]$

复制代码

我们给这个用户取名为git。

所有的远程 Git 仓库都可以在这个用户名下建立,所以以后建立新库或者将新用户的 SSH 公钥添加到服务器时,都使用这个用户操作就可以了。

步骤三,建立远程仓库(已有远程仓库的可以跳过此步骤)

切换到新建的git帐号,并建立一个空的远程仓库。

复制代码

[user@local ~]$ su git
Password: 
git@Linux:/home/user$ cd ~
git@Linux:~$ mkdir project.git
git@Linux:~$ cd project.git
git@Linux:~/project.git$ git init --bare
Initialized empty Git repository in /home/git/project.git/
git@Linux:~$ 

复制代码

建立远程仓库使用git init命令,也可以增加--bare参数。

写不写--bare参数有什么区别呢?

我们知道,一般从远程clone下来的仓库会生成一个独立的目录,在这个目录下有当前分支最新版本的文件,同时还有一个.git文件夹,与.git同级的文件夹称为我们的“工作目录”,我们的修改都在这个目录中进行。而.git就是我们 Git 本地仓库的工作目录,我们add和commit的东西都会被提交到这个目录中。

对git init命令添加--bare参数就表示初始化 Git 仓库的时候不要创建本地工作目录,所以相当于.git文件夹下的所有内容直接创建到当前目录下,而不是被放到.git目录下。

在 Git 服务器上建立好仓库以后,用户就可以克隆这个仓库了。等等。。还没配置用户 SSH 公钥呢,这么就让用户去下载,肯定还是要输入密码才行的。

步骤四,在 Git 服务器上为用户配置 SSH 公钥

还是先在 Git 服务器上使用git用户登录,然后为它建立.ssh目录以及authorized_keys文件来管理所有用户的 SSH 公钥。

git@Linux:~$ mkdir .ssh
git@Linux:~$ touch .ssh/authorized_keys
git@Linux:~$ chmod 600 .ssh/authorized_keys 
git@Linux:~$

authorized_keys文件可以保存多个用户的 SSH 公钥,所有公钥被添加到这个文件中的用户,就都可以使用 SSH 公钥的方式进行身份认证而不再需要通过密码的方式认证了。

git@Linux:~$ cat /tmp/id_rsa_user1.pub >> ~/.ssh/authorized_keys
git@Linux:~$ cat /tmp/id_rsa_user2.pub >> ~/.ssh/authorized_keys
git@Linux:~$ cat /tmp/id_rsa_user3.pub >> ~/.ssh/authorized_keys
git@Linux:~$ 

现在 user1、user2 和 user3 就可以通过 SSH 公钥来操作远程 Git 仓库了,快去试试吧。

免责声明:文章转载自《向 Git 服务器添加 SSH 公钥》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java:双括号初始化 /匿名内部类初始化法Web Worker javascript多线程编程(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ubuntu 交叉编译qt 5.7 程序到 arm 开发板

ubuntu 交叉编译qt 5.7 程序到 arm 开发板平台1 ubuntu 12.042 arm-linux-gcc 4.5.13 QT 5.74 开发板210 armcortex-A8  一 概述QT5的ARM移植及其中文显示 二 准备工具1.交叉编译工具(arm-linux-gnueabi-4.5.1.tar.bz2)2.交叉编译好的Qt库(arm...

nginx学习(二):nginx显示默认首页解析过程

本篇文章分析下nginx 显示默认首页的过程 如下图所示 查看config文件: # 如果忘记nginx 安装目录。使用下面命令查看 [root@XXX]# whereis nginx nginx: /usr/local/nginx # 下面是config文件里面的内容片段 server { listen 80;...

如何做升级测试

大家可以看我总结的一篇更详细的升级测试文章:http://www.cnblogs.com/AlwinXu/p/5836667.html 升级测试是软件测试中非常重要的一环,需要考虑的方面有很多,比如用户数据是否被完整保存,升级失败如何恢复等都对测试人员制定测试策略和编写测试用例带来了一定的挑战。这里我根据最近做的项目做了一个Mindmap来简单的介绍一下做...

Linux下新建用户自动复制文件

/etc/skel/目录是用来存放新用户配置文件的目录,当我们添加新用户的时候,这个目录下的所有文件会自动被复制到新添加的用户的家目录下。 这个目录下的所有文件都是隐藏文件(以.点开头的文件)。 通过修改、添加、删除/etc/skel目录下的文件,我们可为新创建的用户提供统一的、标准的、初始化用户环境。 如果删除了用户目录下的文件,可通过拷贝该文件夹下的相...

树莓派系统备份及还原

树莓派系统备份及还原 目前常见的备份方式是用Win32DiskImager进行全卡备份,该方法的缺点是备份文件会和SD卡的容量一致,而且在还原的时候必须使用比镜像更大容量的SD卡。 还有一种方式是压缩备份,是将需要备份的SD卡的内存压缩至树莓派使用的内存大小。方法是先在Linux环境中将 root分区拆分内容空间和空白空间,然后在Windows上用Win3...

解决git 出现 Your account has been blocked问题

使用git 出现 Your account has been blocked 无法从远程pull代码下来, 解决方案如下: $ git push origin masterGitLab: Your account has been blocked.fatal: Could not read from remote repository. git 提交时出现...