前提:

设置了root用户密码,并且允许root用户登录

现象:

按照hadoop文档:

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

运行之后,使用service sshd restart 重启ssh服务之后,运行ssh localhost仍然必须输入密码。

原因:

OpenSSH 7 版本后禁用了使用dsa算法生成的密钥对登录。在最近使用golang编译的版本中甚至移除了dsa算法,dsa算法生成的密钥对变得完全不可用。

解决方法:

使用rsa算法生成密钥对,或者允许dsa算法生成的密钥对登录。但后者不对最新版本ssh起作用。

1.  使用rsa算法生成密钥对(推荐)

$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ service sshd restart
$ ssh localhost

2.  允许dsa算法生成的密钥对登录(在golang编译的最新版本不可用)

编辑/etc/ssh/sshd_config

 $ vim /etc/ssh/sshd_config

在最后一行追加:

PubkeyAcceptedKeyTypes +ssh-dss

再使用官方文档上的dsa算法生成密钥对即可

参考:

https://github.com/golang/go/issues/23751

https://unix.stackexchange.com/questions/247612/ssh-keeps-skipping-my-pubkey-and-asking-for-a-password