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 公钥维护进去, 就不能实现免密.