1. 安装 Git
sudo apt-get install git
2. 创建一个 git 用户,用来运行 git 服务
sudo adduser git
3. 创建证书登录(可选:这一步的作用是进行相关操作时,免输密码)
ssh key 的基本原理是:在你本机上创建两个 key 文件,一个是私钥,一个是公钥,私钥放在本地,公钥放在远程服务器。当你通过 ssh key 登录到远程服务器时,
远程服务器使用公钥创建一个加密的随机消息,然后发送到本地机器,本地机器使用私钥解密消息,发送解密的消息到远程服务器。远程服务器验证这个解密后的消息,然后授权访问。
实际过程比这个复杂,但我们这里理解大概就可以了。具体操作如下(Windows 下操作相同,命令可在 Git Bash 中执行):
(1) 生成 ssh 密钥
- 查看是否已经有 ssh 密钥(如果没有密钥则不会有此文件夹,有则备份删除)
cd ~/.ssh
mkdir ~/.ssh - 生成 ssh 密钥
ssh-keygen -t rsa
按 3 个回车,密码为空。最后得到了两个文件:~/.ssh/id_rsa.pub(公钥)和 ~/.ssh/id_rsa(私钥)
(2) 将公钥文件内容加到服务器 ~/.ssh/authorized_keys 文件中
- 拷贝公钥文件到服务器
scp ~/.ssh/id_rsa.pub git@58.241.22.107:
注 1:上述 scp 命令末尾有一个冒号。
注 2: 58.241.22.107 为服务器 IP 地址,拷贝后的文件路径是 /home/git/id_rsa.pub。
- 切换到 git 用户,检查 ~/.ssh 目录是否存在,不存在则创建它,并创建 ~/.ssh/authorized_keys 文件
su git
cd ~/.ssh
mkdir ~/.ssh touch ~/.ssh/authorized_keys - 拷贝公钥内容到 ~/.ssh/authorized_keys 文件中
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub
(3) 修改相关目录权限
- 只允许 git 用户访问
chown -R git:git ~/.ssh chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
4. 初始化 Git 仓库
- 切换到 Git 仓库的存放目录
cd ~/
mkdir GitRepository
cd GitRepository - 创建 git 存储库,并设置相关权限(若 git 用户执行不了 sudo 命令,解决方法见文末参考1)
sudo git init --bare xxx.git
sudo chown -R git:git xxx.git
执行完该命令 Git 就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的 Git 仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区。
此外,服务器上的 Git 仓库通常都以 .git
结尾。
- 退出 git 用户
exit
5. 禁用 shell 登录(可选)
出于安全考虑,第 2 步创建的 git 用户不允许登录 shell,这可以通过编辑 /etc/passwd
文件完成
sudo vim /etc/passwd
找到类似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git 用户可以正常通过 ssh 使用 git,但无法登录 shell,因为我们为 git 用户指定的 git-shell 每次一登录就自动退出。
注:若没有该文件的写权限,可执行以下命令更改
sudo chmod 666 /etc/passwd
6. 克隆远程仓库
通过 git clone 命令克隆远程仓库:
git clone git@服务器 IP 地址:仓库地址/xxx.git
注1:示例 git clone git@58.241.22.107:/home/git/GitRepository/VerifyPlatform_Cmd.git
注2:运行 git clone 时,如果报 sign_and_send_pubkey: signing failed: agent refused operation,则运行下以下命令
eval "$(ssh-agent -s)" ssh-add
参考1:Ubuntu 报 "xxx is not in the sudoers file.This incident will be reported" 错误解决方法