问题及解决方案

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

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

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

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

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

  1. 安装 git
1
2
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
yum install -y git
  1. 创建用户
1
2
useradd git # 创建用户
passwd git # 设置密码
  1. 创建网站目录以及 git 仓库
1
2
3
4
5
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,输入以下内容
1
2
3
# post-receive 文件内容
#!/bin/sh
git --work-tree=/var/www/blog --git-dir=/var/repos/blog.git checkout -f
1
2
3
chmod +x post-receive                # 修改钩子文件的权限
chown -R git:git /var/repos/blog.git # 添加仓库目录权限
chown -R git:git /var/www/blog # 添加博客目录权限

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

1
2
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 中的权限

1
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


本文作者贪狼
本文地址https://www.icksky.com/notes/hexo-deploy-git-authorized-keys/
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!