在ubuntu里搭建自己的git服务器

ubuntu搭建git服务器

git服务器搭建

  • 安装git:apt install git
  • 建立git用户:useradd git :用useradd建立的用户权限最小,且没有运行bash权限,但需要手工建立用户目录和设置密码;adduser建立的用户会自动建立用户目录并同时设置密码,拥有bash权限)
  • 设置git用户密码:passwd git
  • 进入/home目录,递归创建用户目录、仓库目录、项目目录:mkdir -p git/repository/gittest.git在这里插入图片描述
  • 进入仓库目录repository,初始化项目目录:git init --bare ./gittest.git在这里插入图片描述
  • 修改仓库目录repository的所有者:chown -R git:git /home/git/repository

此时git服务器搭建完成,但为了能使用ssh密钥访问,需要配置ssh密钥

ssh密钥的生成和配置

客户端

  • 在客户端命令行生成密钥对:ssh-keygen -C '输入描述文字'
  • 会提示Enter file in which to save the key,需要确定密钥文件保存位置和名称(:这里有坑,建议直接回车使用默认名称id_rsa,若已经存在同名文件,先备份)
  • 接下来要求输入密码,可以不输入,如果输入了密码,那么以后每次连接都需要输入密码
  • /users/[username]/.ssh/目录里生成了两个密钥文件id_rsaid_rsa.pub

git服务器端

  • 在git用户目录/home/git/下建立.ssh目录
  • .ssh目录里新建一个authorized_keys文件,将在客户端生成的id_rsa.pub文件内容复制进该文件

设置全部完成,下面两条是安全措施,建议也设置

  • 使用chown git:git[文件名或目录名]命令,修改.ssh目录和authorized_keys文件所有者
  • 使用chmod 600/700 [文件名或目录名]命令,修改.ssh目录权限为700,authorized_keys文件权限为600

客户端连接git服务器

新建客户端一个目录,在此目录打开git客户端,连接服务器测试

git clone ssh://git@[服务器地址]:/home/git/repository/gittest.git

关于密钥文件的坑

git客户端貌似默认只读取客户端的.ssh目录中的名为id_rsa的密钥文件,如果生成密钥的时候自定义了密钥文件名字,则会连接失败。

如果之前和其他git服务器如github建立了连接,就已经存在了id_rsa文件,再次以默认名字生成密钥且覆盖了该文件后,github就无法连接了。

解决方法一:共享密钥文件

不要再次生成密钥文件,直接打开已经存在的公钥文件id_rsa.pub,将里面的内容复制到git服务器的authorized_keys文件中,也就是让github和新建的git服务器都共享同一对密钥文件。

解决方法二:建立配置文件

此方法的密钥文件可使用自定义文件名,如github使用的密钥文件名为github_key,新建的git服务器密钥文件名为new_key

在客户端的.ssh目录中新建一个名为config的文件,里面写入以下配置:

Host github.com # 服务器地址
    HostName github.com # 服务器地址
    User git # 用户名
    IdentityFile C:/Users/[username]/.ssh/github_key # 密钥文件路径

Host [git服务器地址]
    HostName [git服务器地址]
    User git
    IdentityFile C:/Users/[useranme]/.ssh/new_key

这样对于不同git服务器可以使用指定的密钥文件来连接。


版权声明:本文为jewely原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。