SSHKey

2016.02.04 20:39 Thu| 107次阅读 technology| 源码

将生成的公匙复制到~/.ssh/authorized_keys文件中

1)切换目录

  • 切换到当前用户主目录
cd ~

2)创建目录

  • 创建.ssh目录
  • .ssh目录权限设置为仅所有者拥有读写和执行权限,并将修改应到目录下所有文件和子目录

注意:.ssh目录的权限必须是700,否则无法建立信任关系,导致密匙不生效。

mkdir .ssh
chmod 700 -R .ssh

3)创建公匙文件

  • 进入.ssh目录
  • 创建authorized_keys文件用于存储公钥
  • authorized_keys文件权限设置为仅所有者拥有读写权限

注意:authorized_keys文件的权限必须是600,否则无法建立信任关系,导致密匙不生效。

cd .ssh
touch authorized_keys
chmod 600 authorized_keys

4)编辑公匙文件

  • 使用vi编辑authorized_keys文件
vi authorized_keys

如果配置authorized_keys好后仍然提示需要输入密码,那么很可能就是目录和文件的权限配置不正确导致的。一旦authorized_keys文件、$HOME/.ssh目录或$HOME目录让本用户之外的用户有写权限,它就很可能会被其他用户篡改,那么sshd都会拒绝使用~/.ssh/authorized_keys文件中的公匙来进行认证的。

简而言之:authorized_keys文件、$HOME/.ssh目录、$HOME目录,不允许其他用户拥有写权限。

按下按键i,进入编辑模式
点击鼠标右键,将刚刚复制的公钥粘贴到文件中
输入:wq,回车退出编辑

4)编辑配置文件

  • 使用vi编辑sshd_config配置文件
vi /etc/ssh/sshd_config
  • 启用密匙登陆

确保sshd_config文件三个参数都已经开启,检查下面几行前面"#"注释是否取掉,先去掉注释,然后再将后面的值改为yes

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

禁用密码登录
PasswordAut??hentication no

5)重启服务

  • 重启SSH服务

RedHat/CentOS系统用户,输入:

service sshd restart

Debian/Ubuntu系统用户,输入:

service ssh restart

5)修复错误

经上述几步设置后,应该可以成功使用密匙认证登录SSH。
若失败,请检查以下配置是否正确:

  • authorized_keys 文件权限为600
  • $HOME/.ssh目录权限为700 $HOME目录权限为700或750

若上述SSH信任关系建立后仍需要输入密码登录,那么可能是SELinux配置不正确导致的,请关闭SELinux后再次使用密匙尝试登陆:

  • 临时关闭SELinux(无需重启机器)
setenforce 0
  • 永久关闭SELinux(需重启机器)
vi /etc/selinux/config

SELINUX的值设置为disabled
保存退出,重启系统后生效

此时重新尝试使用密匙登陆,若登陆成功,则故障确定为SELinux配置不正确,永久关闭SELinux后登陆将不再受到影响。

SELinux本身不一定会引起问题, 问题原因是新建立的.ssh目录的security context配置不正确。

restorecon -r -vv ~/.ssh

此时重新开启SELinux

  • 临时开启SELinux(无需重启机器)
setenforce 1
  • 永久开启SELinux(需重启机器)
vi /etc/selinux/config

SELINUX的值设置为enforcing,保存退出,重启系统后生效。

  • 查看SELinux状态
getenforce  

如果返回值参数为enabled即为开启状态,permissive则为关闭状态

检查SELinux开启后,再使用SSH密匙登陆,若登陆成功,则表示问题得到完美解决。


相关链接

http://www.centoscn.com/CentosBug/softbug/2013/1204/2193.html

http://www.tuicool.com/articles/ze2ARvZ

http://www.thinkingquest.net/articles/505.html

http://www.111cn.net/sys/linux/48689.htm

http://www.aiezu.com/system/linux/xshell_ssh_public-key_login.html

https://lazyzhu.com/Linux/Setup-server-ssh-keys-and-safe-login-for-authentication.html

mkdir -p ~/.ssh
chmod 700 ~/.ssh