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_rsa
和id_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版权协议,转载请附上原文出处链接和本声明。