现在基本上都普及使用git了,所以服务器登录的sshkey和git sshkey最好能分开使用,不要互相混淆。网上有很多关于单独配置linux服务器登录证书和git证书的教程,但是都是囫囵吞枣。这里将这两个问题放在一起来处理。
服务器登录的sshkey
authorized_keys不再放在 %h/.ssh/authorized_keys ,而专门存放在一个指定的目录中,在本文的例子中,我们将authorized_keys都存放 /etc/ssh/keys/%u/authorized_keys 。
这里假定我们需要允许使用ssh登录的用户为web-user。
useradd -d /home/web-user -m -s /bin/bash web-user
首先,以 root 用户创建必须的目录:
mkdir /etc/ssh/keys
mkdir /etc/ssh/keys/web-user
cd /etc/ssh/keys/web-user
ssh-keygen -t rsa -b 4096 -f id_rsa -C "web-user"
这里,请把id_rsa和id_rsa.pub的文件保存到自己电脑上,使用 puttygen.exe 生成私钥(Save Private Key)。
cat id_rsa.pub >> authorized_keys
rm id_rsa*
chown web-user:web-user ./ -Rf
chmod 700 ./
chmod 600 authorized_keys
上述操作中,后面三步很重要,authorized_keys文件和authorized_keys所在的目录如果权限不正确,则在登录时会一直提示这个证书的权限被屏蔽。
接下来,修改/etc/ssh/sshd_config文件的配置,下面列举的内容是较为关键的部分,其他请酌情删改。
PermitRootLogin no
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile /etc/ssh/keys/%u/authorized_keys
PasswordAuthentication no
PermitEmptyPasswords no
修改完毕后,执行 service ssh restart 重启ssh服务,但注意,这里不要立刻关闭当前连接,最好维持住,然后打开一个新窗口来验证ssh证书是否生效。
关于登录用户的权限问题
id -Gn web-user 可以知道该用户的所在的用户组。
如果需要这个用户拥有sudo的权限,需要将用户添加到指定的 sudoers 的组,具体可以查询 cat /etc/sudoers。
git的sshkey
首先,git需要先设定当前环境的执行用户,root用户和需要使用git的权限的用户组,因为git默认的配置信息时保存在 %u/.gitconfig文件上,所以都需要设定:
git config --global user.name "Janpoem"
git config --global user.email "janpoem@163.com"
这里,假如你还没创建过和添加git的公钥,请参考git@osc的教程。下面假设你已经生成并拥有相关的私钥和公钥,并且已经在相关的git服务供应商添加了相关了公钥。
在用户的 .ssh 目录中,只需要保留id_rsa(私钥)即可,注意,是%u/.ssh 或 ~/.ssh,养成良好习惯:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
执行 ssh git@git.oschina.net 或 ssh git@github.com 检查证书是否能生效。
好了,从此更新不用再打密码了。
补充说明一下flashFXP的sftp协议设定的问题
如果你的证书的设定了passphrase,那么在flashFXP中,登录类型要选择:

如果没有设定passphrase,则使用【基于密钥】即可。
来源:oschina
链接:https://my.oschina.net/u/57579/blog/667180