问题及解决方案

今天在尝试通过 git 部署 Hexo 的时候, 发现远程服务器新建了 git 用户后无法通过设置 authorized_keys 来免密登录. 通过一番搜索发现是因为 git 用户下 .ssh 目录权限的问题.

其实是服务器 public key 部署的问题

su git # 切换到 git 用户
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

简要记录一下 git 部署 Hexo 方案的过程

服务器用户以及目录权限部署

  1. 安装 git
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
yum install -y git
  1. 创建用户
useradd git # 创建用户
passwd git  # 设置密码
  1. 创建网站目录以及 git 仓库
mkdir -p /var/www/blog         # 项目目录(nginx 指向目录)
mkdir -p /var/repos
cd /var/repos
git init --bare blog.git       # 创建一个空仓库
vi blog.git/hooks/post-receive # 创建 hook,输入以下内容
# post-receive 文件内容
#!/bin/sh
git --work-tree=/var/www/blog --git-dir=/var/repos/blog.git checkout -f
chmod +x blog.git/hooks/post-receive # 修改钩子文件的权限
chown -R git:git /var/repos/blog.git # 添加仓库目录权限
chown -R git:git /var/www/blog       # 添加博客目录权限

部署 public key (本地电脑操作)

ssh-copy-id -i ~/.ssh/id_rsa.pub git@server_ip -p server_ssh_port # 无 -p 参数, 默认 22 端口
ssh -p server_port git@server_ip                                  # 此处 ssh 应该不用输入密码

注: 如果此处提示输入密码, 可能是权限问题, 参考文章开头 [问题及解决方案], 否则请检查以上步骤

回到服务器 禁用 git 用户登录 shell

修改 /etc/passwd 中的权限

git:x:1000:1000::/home/git:/usr/bin/git-shell

更新一个坑(远程 SSH 端口非 22 时, Hexo 的 git 部署)

如果 ssh 的端口不是 22, 则需要把 _config.ymldeploy.repo 设置为 ssh://git@server_ip:server_ssh_port/var/repos/blog.git


笔记      随笔 hexo

自由转载-非商用-禁止演绎-保持署名 (CC BY-NC-ND 4.0)