Git 秘钥管理(服务器和客户端)

借鉴(转载):http://blog.chinaunix.net/uid-28621021-id-3487552.html
遇到问题:
1. 工作站Ubuntu系统,有多用户,想在自己用户下面配置自己的公钥管理;在自己home目录下代码仓库
2. 工作站重装系统后,home目录下原有.ssh目录不存在;将开发者端公钥配置到.ssh/authorized_keys后,仍然无法clone,出现如下问题:
这里写图片描述
**根据提示:可以看出由于开发者端原先存储的服务器指纹与现有工作站新系统下的指纹不匹配
(原理:当clone后,.ssh/下面会生成一个known_hosts,记录远程服务器的相关信息,本人遇到的问题正是由于远程是新的指纹信息,而本地未更新,导致不匹配!
解决方法:将本地known_hosts中内容删除即可,会自动更新)**
最终:服务器和本地版本库和原来一样,继续同步

1、公钥的生成

任何一个需要使用git服务器的工程师都需要生成一个ssh的公钥。可以通过ssh-keygen来生成

~/.ssh$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/shizhen/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/shizhen/.ssh/id_rsa.
Your public key has been saved in /home/shizhen/.ssh/id_rsa.pub.
The key fingerprint is:
a8:19:49:f4:e6:e8:4f:8f:3e:47:c9:19:4c:09:ee:7f shizhen@sz-desktop
The key's randomart image is:

首先会让你输入要保存公钥的位置,直接回车即可,接着会提示让你重复一个密码两次,如果不想再使用公钥的时候输入密码,直接回车即可。完成后会在相应目录下(窗口有显示)目录下的.ssh目录中生成两个文件id_rsa(私有密钥)和id_rsa.pub(公钥)。
将生成的公钥即id_rsa.pub发给git仓库的管理者。

2、架设服务器

(1)服务器端
最好建立一个git组,让后再添加一个git用户(用户名可以自己随便取,比如我在工作站上有个自己的账户pp,就没必要再新建pp用户了),并且添加到该组当中(可以直接将pp添加到git组)。

sudo adduser pp(新添加的pp用户,如果是git用户就改为git)
su pp
cd ~
mkdir .ssh

在pp用户新建一个.ssh的目录,将开发者的SSH公钥添加到pp这个用户的authorized_keys这个文件当中。(本人在此犯二,此处只需在pp/home(工作站上我自己的家目录)下新建一个.ssh文件夹及authorized_keys文件)(最初是没有的
如有zhangsan,lisi两个开发者。

cat /tmp/id_rsa_zhangsan.pub >> ~/.ssh/authorized_keys
cat /tmp/id_rsa_lisi.pub >> ~/.ssh/authorized_keys

建立一个空的仓库

cd work
mkdir project.git
cd project.git
git --bare init

使用–bare会初始化一个不带任何工作目录的仓库,不会看到工程源码。
为了不使开发者每次clone代码的时候都输入ip地址,可以采用DNS的方式。具体操作如下

sudo vim /etc/hosts

在里面加入下面一行

192.168.1.100 gitserver

(2)开发者端
若没有仓库的情况下,需要首先新建一个仓库。在需要建立仓库的,目录下执行以下的命令。

cd my_project
git init
git add . (将所有文件加入仓库管理)
git commit -m "initial commit"
git remote add origin git@gitserver:/home/git/work/project.git(**配置了DNS后可以这样**)
(未配置应该加上IP地址,即:git@192.168.1.100:/home/git/work/project.git)
git push origin master

若本地已有仓库,但想把其中的代码push到我们新的服务器上,可以直接用下面的命令
把想要push的分支代码新建成master分支

git checkout -b master xxxxx
git push origin master

这样一个简单的服务器就可以工作了,其他的开发者可以直接从服务器上进行代码开发了。
为了保护git服务器,限制开发者登陆服务器,可以采用如下的措施。

sudo vim /etc/passwd

在文件结尾找到这样的类

git:x:1001:1001:,,,:/home/git:/bin/bash

将其中的/bin/bash/改为/user/bin/git-shell
现在开发者只能通过SSH来推送和获取代码,不能登陆ssh服务端了。
3.问题
現在的 ssh 使用同樣的方法會出現錯誤訊息

Agent admitted failure to sign using the key

解決方式 :
使用 ssh-add 指令将私钥 加进来 (根据个人的密匙命名不同更改 id_rsa)
即各自的开发者执行命令

ssh-add id_rsa

你可能感兴趣的:(工具,Linux)