Linux系统搭建Git仓库

整理在 linux 上搭建 git 仓库的流程,以及密钥登录的配置。

服务器操作

安装相关组件

yum install git git-tools # 建议使用发行版自带的包管理工具安装最新版本 git
git --version

初始化 linux 账户

id git # 判断此用户是否存在
useradd git -b /home/git
passwd git
su git # 以 git 账户登录进行后续操作
cd /home/git
mkdir .ssh
touch .ssh/authorized_keys
# 确认权限
sudo chown -R git:git /home/git/.ssh/ # 确保 git 用户对版本库的权限
sudo chmod -R 700 /home/git/.ssh/
sudo chmod -R 600 /home/git/.ssh/authorized_keys
# 初始化 git 库
git init --bare test.git # 生成 test.git 文件夹,即版本库

修改 ssh 配置

sudo vi /etc/ssh/sshd_config 打开如下注释:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
AuthorizedKeysCommand none
AuthorizedKeysCommandRunAs nobody

/etc/rc.d/init.d/sshd restart 重启 sshd 服务。

导入客户端公钥

将客户端提供的公钥文件内容附加到 /home/git/.ssh/authorized_keys 文件中。文件内容一行即为一个客户端公钥。

客户端配置

生成 RSA 证书

ssh-keygen -t rsa -b 4096 (man ssh-keygen)

此处不再赘述服务器证书的生成过程。需要保证 id_rsa.pub 文件内容已存在于服务器的 authorized_keys 文件中。

clone 项目到本地

git clone [email protected]:/home/git/test.git or

git clone ssh://[email protected]:3721/home/git/test.git

流程正确无误的情况下即可不用输入任何密码就能把项目 clone 到本地,后续 push 也不用输入密码(若客户端私钥设置了密码则必须手动输入密码)。

文件权限

服务端

sudo chown -R git:git /home/git/.ssh/
sudo chmod -R 700 /home/git/.ssh/
sudo chmod -R 600 /home/git/.ssh/authorized_keys

客户端

sudo chmod 400 id_rsa

安全设置

可以修改 /etc/passwd 文件禁用 git 用户登录 shell.

问题总结

已配置公钥但是 clone 仍需要输入密码

  • 确认 git 版本库的权限是否正常
  • 确认 客户端私钥是否有密码保护

如何取消客户端私钥密码?

openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa_new

新生成的 id_rsa_new 即不存在密码保护了。


git 命令参考网站:

git-scm中文版

git-scm英文版

猜你喜欢

转载自www.cnblogs.com/stdupanda/p/9134223.html