以下记录简单的 Git 服务器配置过程及在此期间出现的一些问题的解决方法。以下内容所用的服务器操作系统为 CentOS 6.5,本地为 Mac。

1. Git 服务器配置过程

1.1 安装 Git

yum -y install git 这一步教程很多,不再赘述。

1.2 创建 git 用户

创建一个 git 用户。这里也可以不创建而直接使用 root,但使用 root 操作服务器不被建议。
依次运行以下两步:

  1. useradd git

  2. 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_rsaid_rsa.pub,其中前者是私钥,后者为公钥。有关公钥私钥和 RSA 算法可参见知乎

2. 问题备忘

2.1 密码问题

在进行连接测试 ssh -T git@your.server.ip.addr 的时候,会让我们输入密码,这一情况同样会出现在使用 git clone xxx 等操作中。如果想不再输入密码,可以复制本地 id_rsa.pub 的内容到服务器的 authorized_keys 文件中,具体步骤如下:

  1. 复制本地 id_rsa.pub 内容,执行 cat ~/.ssh/id_rsa.pub,将内容复制;

  2. 在服务器端创建 authorized_keys 文件,执行 cd ~/.sshvim authorized_keys,并将内容粘贴进去,之后若还需添加其他客户机,可回车换行后再输入,保证每行一个。(在 vim 指令后,点击 i 键 进如输入状态,粘贴 1 中的文本,之后按 ESC 键 退出输入状态,再输入 :wq 即可完成粘贴。这一步涉及简单的 vim 操作,其他相关内容可自行查找资料)。

2.2 authorized_keys 失效问题

进行 2.1 步骤后,在本地执行 ssh -T git@your.server.ip.addr 后,可能出现仍然要求输入密码的问题,原因和解决方法如下:

原因一:
  1. 问题原因:创建的 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。

  2. 解决方法: 在 git 用户空间下的 .ssh/authorized_keys 中粘贴进本地的公钥。可以使用 git 用户登录服务器,使用 vim ~/.ssh/authorized_keys 粘贴公钥;或用 root 登录,然后对 /home/git/.ssh/authorized_keys 进行修改,其中,前面的路径表示 git 的用户空间,此外,若 git 用户目录下没有 .ssh 文件夹,则使用 mkdir .ssh 创建之(root 用户有最高权限,可操作其他用户)。

原因二:
  1. 问题原因:.ssh 目录和 authorized_keys 文件权限不对。

  2. 解决方法:分别修改这两部分的权限:1) sudo chmod -R 700 ~/.ssh, 2) sudo chmod -R 600 ~/.ssh/authorized_keys。注意,这里修改的依然是想要不输密码就可连接的用户所在用户空间的文件权限和目录权限,参见原因一。

原因三:
  1. 问题原因:用户空间权限不对。

  2. 解决方法:首先使用 root 登录服务器 ssh root@your.server.ip.addr,修改相应用户空间的权限:sudo chmod -R 755 /home/git,其中,路径为想要修改的用户空间路径。注意,如果想让 root 用户不输密码连接,则无需进行这一步。

2.3 .ssh 目录下各文件的意义

注:以下文件可能不存在。

  1. id_rsa:私钥;

  2. id_rsa.pub:公钥;

  3. authorized_keys:服务器端记录公钥的文件;

  4. known_hosts:当本地与服务端连接时,本地 SSH 记录服务端的 Host、IP 以及 RSA 等信息的文件。当连接时出现:Permanently added 'your.server.ip.addr' (RSA) to the list of known hosts. 时,若选择 yes 则会创建这一文件。

3. 参考

  1. CentOS下使用yum安装Git具体步骤 - 开源中国社区

  2. Centos 建立一个新用户 详细讲解

  3. centos安装启动ssh服务 - CSDN

  4. ssh的配置及管理 - 新浪博客

  5. Git SSH Key 生成步骤 - CSDN

  6. 如何生成SSH key - 百度知道

  7. RSA的公钥和私钥到底哪个才是用来加密和哪个用来解密? - 知乎

  8. git通过authorized_keys来管理用户的权限(二)

  9. 远程登陆不要密码,使用authorized_keys不生效的解决方法 - CSDN

  10. ssh配置authorized_keys后仍然需要输入密码的问题

  11. git/ssh捋不清的几个问题 - Barret Lee - 推酷

  12. SSH原理与运用(一):远程登录 - 阮一峰的网络日志

  13. 从菜鸟到入门,掌握SSH - CSDN


dailybird
1.1k 声望73 粉丝

I wanna.