Setup passphraseless ssh 但 总是要密码……
安装配置Hadoop伪分布时需要配置ssh无密码的连接本机。
安装ssh(应该都带吧。。) sudo apt-get install ssh
检查是否无密码连接 ssh localhost
如果连接还需要输密码的话尝试:
1 2 |
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys |
上面就是生成dsa密钥保存在本用户的authorized_keys实现通过密钥登陆。(就是一般的ssh密钥登陆设置嘛)
— 以上是Hadoop官方文档写的 —
可是,事情总不是那么顺利。。。我特么就是要输密码啊!
经过一些搜索,虽然不能直接解决问题,但是找到了一些方法。首先通过运行ssh的dubug模式,查看有什么错误。
1 2 3 4 |
# 把原来的sshd服务停掉 service sshd stop # debug模式运行sshd /usr/sbin/sshd -Dd |
然后打开另一个终端, ssh localhost 。在sshd的终端发现了如下一行东西:
1 |
Authentication refused: bad ownership or modes for file /home/msir/.ssh/authorized_keys |
知道了具体错误就好办些了。搜索得知,原来是文件夹权限问题。(来源)
SSH不允许你的用户目录或者~/.ssh目录对其他用户有写的权限。用户目录只对自己是可写的。~/.ssh目录则是700,authorized_keys文件权限必须是600。
(ssh对其文件夹的要求有点丧心病狂?虽然是试验机,好吧为了安全还是表示理解。。)
执行下面的命令以保证上面的要求(我的用户名叫msir)
1 2 3 4 5 |
# 去掉组的写权限 chmod g-w /home/msir # 分别设置.shh的权限 chmod 700 /home/msir/.ssh chmod 600 /home/msir/.ssh/authorized_keys |
然后再执行ssh localhost试试,发现就不用输密码了~
—EOF—