以下记录简单的 Git 服务器配置过程及在此期间出现的一些问题的解决方法。以下内容所用的服务器操作系统为 CentOS 6.5,本地为 Mac。
1. Git 服务器配置过程
1.1 安装 Git
yum -y install git
这一步教程很多,不再赘述。
1.2 创建 git 用户
创建一个 git 用户。这里也可以不创建而直接使用 root,但使用 root 操作服务器不被建议。
依次运行以下两步:
useradd git
passwd git your-password
注:后面为自定义的密码
1.3 安装 SSH
yum install openssh-server
同 1.1,不再赘述,可参考链接。
1.4 测试连接
在本地执行:ssh -T git@your.server.ip.addr
注:后面为服务器域名或 ip 地址。
如果报错 Permission denied, please try again.
则失败。
注:可能会出现提示:
Last failed login: Tue Nov 8 11:50:06 CST 2016 from xxx on ssh:notty
There were 548 failed login attempts since the last successful login.
也为连接成功。
1.5 本地生成公私密钥对
在本地执行:ssh-keygen -t rsa -C "xxx@xxx.com"
注:后面为用户名,可随意命名
此操作后,会在 ~/.ssh
下创建两个文件 id_rsa
和 id_rsa.pub
,其中前者是私钥,后者为公钥。有关公钥私钥和 RSA 算法可参见知乎。
2. 问题备忘
2.1 密码问题
在进行连接测试 ssh -T git@your.server.ip.addr
的时候,会让我们输入密码,这一情况同样会出现在使用 git clone xxx
等操作中。如果想不再输入密码,可以复制本地 id_rsa.pub
的内容到服务器的 authorized_keys
文件中,具体步骤如下:
复制本地
id_rsa.pub
内容,执行cat ~/.ssh/id_rsa.pub
,将内容复制;在服务器端创建
authorized_keys
文件,执行cd ~/.ssh
,vim authorized_keys
,并将内容粘贴进去,之后若还需添加其他客户机,可回车换行后再输入,保证每行一个。(在 vim 指令后,点击i 键
进如输入状态,粘贴 1 中的文本,之后按ESC 键
退出输入状态,再输入:wq
即可完成粘贴。这一步涉及简单的 vim 操作,其他相关内容可自行查找资料)。
2.2 authorized_keys 失效问题
进行 2.1 步骤后,在本地执行 ssh -T git@your.server.ip.addr
后,可能出现仍然要求输入密码的问题,原因和解决方法如下:
原因一:
问题原因:创建的
authorized_keys
文件所在用户目录和使用ssh -T
连接的用户不同。由于创建authorized_keys
需要登录到服务器,此时若使用ssh root@your.server.ip.addr
登录服务器,然后执行对~/.ssh/authorized_keys
文件的修改,则修改的是 ssh 对 root 用户的请求限制。也就是说,在这种情况下,执行ssh -T root@your.server.ip.addr
是不用输入密码的,受益的是 root 用户,而不是 git。解决方法: 在 git 用户空间下的
.ssh/authorized_keys
中粘贴进本地的公钥。可以使用 git 用户登录服务器,使用vim ~/.ssh/authorized_keys
粘贴公钥;或用 root 登录,然后对/home/git/.ssh/authorized_keys
进行修改,其中,前面的路径表示 git 的用户空间,此外,若 git 用户目录下没有 .ssh 文件夹,则使用mkdir .ssh
创建之(root 用户有最高权限,可操作其他用户)。
原因二:
问题原因:
.ssh
目录和authorized_keys
文件权限不对。解决方法:分别修改这两部分的权限:1)
sudo chmod -R 700 ~/.ssh
, 2)sudo chmod -R 600 ~/.ssh/authorized_keys
。注意,这里修改的依然是想要不输密码就可连接的用户所在用户空间的文件权限和目录权限,参见原因一。
原因三:
问题原因:用户空间权限不对。
解决方法:首先使用 root 登录服务器
ssh root@your.server.ip.addr
,修改相应用户空间的权限:sudo chmod -R 755 /home/git
,其中,路径为想要修改的用户空间路径。注意,如果想让 root 用户不输密码连接,则无需进行这一步。
2.3 .ssh 目录下各文件的意义
注:以下文件可能不存在。
id_rsa
:私钥;id_rsa.pub
:公钥;authorized_keys
:服务器端记录公钥的文件;known_hosts
:当本地与服务端连接时,本地 SSH 记录服务端的 Host、IP 以及 RSA 等信息的文件。当连接时出现:Permanently added 'your.server.ip.addr' (RSA) to the list of known hosts.
时,若选择yes
则会创建这一文件。