当前位置: 首页 > news >正文

小组级git服务器的搭建

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:

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

2、架设服务器

(1)服务器端
最好建立一个git组,让后再添加一个git用户,并且添加到该组当中。
sudo adduser git
su git
cd ~
mkdir .ssh
在git用户新建一个.ssh的目录,将开发者的SSH公钥添加到git这个用户的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 (即: 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

相关文章:

  • hdu 5491(位运算)
  • easyUI datetimebox 自定义显示格式
  • genymotion在后台总是打印这个错误的log 有大神知道怎么解决吗
  • 高效快捷解决一个TextView显示多种字体的控件SpannableTextView
  • JavaScript判断各浏览器CSS前缀的两种方式
  • nginx动静分离后的一些小事故,给出处理方法
  • C#--索引
  • 观察者2
  • 使用异步消息处理更新UI线程
  • jquery 单击li防止重复加载的实现代码
  • delphi 线程同步的基本方法
  • apply,call,bind的区别
  • Razor语法
  • Failed to load VMMR0.r0
  • 如何学好一本编程语言
  • [ JavaScript ] 数据结构与算法 —— 链表
  • [数据结构]链表的实现在PHP中
  • 《剑指offer》分解让复杂问题更简单
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 【译】理解JavaScript:new 关键字
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • AWS实战 - 利用IAM对S3做访问控制
  • gitlab-ci配置详解(一)
  • Mysql优化
  • Python语法速览与机器学习开发环境搭建
  • React 快速上手 - 07 前端路由 react-router
  • SpingCloudBus整合RabbitMQ
  • Sublime text 3 3103 注册码
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 模型微调
  • 手机端车牌号码键盘的vue组件
  • 网络应用优化——时延与带宽
  • linux 淘宝开源监控工具tsar
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (C++20) consteval立即函数
  • (k8s中)docker netty OOM问题记录
  • (WSI分类)WSI分类文献小综述 2024
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (算法)N皇后问题
  • (转)用.Net的File控件上传文件的解决方案
  • .bat批处理(六):替换字符串中匹配的子串
  • .form文件_一篇文章学会文件上传
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET Core WebAPI中封装Swagger配置
  • .Net MVC + EF搭建学生管理系统
  • .net Stream篇(六)
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .net和jar包windows服务部署
  • @Conditional注解详解
  • @RunWith注解作用