git免密码

git 免密码是一个长期困扰我的问题.

开始玩 git 的时候, 在网上看了很多 git 免密码的教程. 但照着做了相应哲作之后, 并没有真正实现免密码的效果.

以前觉得, 不能免密码, 也不是什么大事, 只要自己把自己服务器的密码记住就好了. 但后来开始试着写脚跑 git, 发现如果不能免密, 真的会很麻烦.

所以又仔细研究了一下, 忽然福至心灵, 这个问题就解决了.

为了避免以后碰到同样的事情后懵逼, 把这个问题的解决过程记录如下:

网上教程的操作

先安装 git 和 ssh. 在指定目录下使用

git init --bare 目录名.git

创建服务器的 git 库.

开启服务器上 ssh 的公钥免密服务:

  • 打开 /etc/ssh/sshd_config 文件
  • 把如下注释打开
    • RSAAuthentication yes # 开启RSA认证功能
    • PubkeyAuthentication yes # 开启公匙认证
    • StricModes no # 据说不改会强制要求登录用户和文件拥有者用户相同

在本地机用

ssh -keygen -t rsa

创建 ssh 的本机公私钥.

从本地的 /home/本地机用户名/.ssh/id_rsa.pub 中复制所有内容. 贴到服务器 /home/服务器机用户名/.ssh/authorized_keys 中.

如果服务器没有 /home/服务器机用户名/.ssh/authorized_keys 文件, 真接 touch 出来既可.

问题及解决

按网上的教程来说, 经过上述操作, 应该就能免密了.

但我的实际情况是, 经过上述操作还是不能免密. 开始一直不知道为什么. 后来突然想到, 是不是服务器上版本库的权限在谁身上, 就应该在谁的家目录里维护 .ssh/authorized_keys 文件.

后来发现果然如此. 我的服务器上, 版本库都是 root 建的. 以前用 git 去 push 或 pull 都輸 root 的密码. 后来在 root 的家目录里维护了 .ssh/authorized_keys 果然就免密了.

还有一点要说的是, 在本地机上, 用哪个用户 git clone , 就要把它的家目录下的 .ssh/id_rsa.pub 维护到服务器的 .ssh/authorized_keys 里去.

也就是说, 如果用 sudo 来 git clone, 而没有把 root 的 ssh 公钥维护进去, 就不能实现免密.

Last Updated:
Contributors: zhang