设置ssh无密钥登录

Posted by Elton's Blog on January 6, 2013

在linux系统中,ssh是远程登录的默认工具,因为该工具的协议使用了RSA/DSA的加密算法.该工具做linux系统的远程管理是非常安全的。telnet,因为其不安全性,在linux系统中被搁置使用了。

ssh有一套很有用的工具,其中的ssh-keygen可以用来生成private和public密钥.将生成的public密钥拷贝到远程机器后,可以使ssh到另外一台机器的登陆不用密码.具体方法如下.

1) 在本地机器中的~/.ssh/目录下执行下命令:

ssh-keygen -t rsa -C "[email protected]"

将生成两个文件,id_dsa和id_dsa.pub.

2) 将id_dsa.pub拷贝到远程机器,并且将id_dsa.pub的内容添加到~/.ssh/authorized_keys中.

cat id_dsa.pub >>authorized_keys

注意:目录.ssh和文件authorized_keys的权限必须是600.

完成这些工作后,用户从本地机器到远程机器的登录就不用密码了.

3) 关闭密码登录(可选) 如果不想再使用密码登录,可以在/etc/ssh/sshd_config中关闭 把文件中的#PasswordAuthentication yes 的#去掉,并将”yes”改成”no” 系统默认使用基于密码的验证方式,现改为基于密钥的验证方式,从而提高了系统的安全性

UPDATE: 13-01-15 注意:如果是CentOS 6.3系统,默认会把用户的目录进行加密,所以放在/home/user下的文件都是加密的,如果直接使用这种方式登录,会提示一下错误:

Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

解决方法:

restorecon -R ~/.ssh

另外,如果你在Centos中建立了非root用户,则这个用户的.ssh目录的权限应该是700,authorized_keys文件的权限应该是644,可以用chmod去编辑对应的权限。

创建用户可以使用

useradd username
groupadd devs
usermod -G devs username