ssh 免密码登录root用户
- ubuntu 16.04 LTS
- 遇到这个问题是在使用
start-all.sh
启动hadoop时,提示没有权限执行mkdir等命令,于是使用sudo ./shart-all.sh
启动,提示要输入要远程连接的主机上的root账户密码。 - 之后意识到我之前实在hadoop账户下设置的ssh免密码登录,能够免密码登录到不同的主机上的hadoop账户,但是不能登录到其root账户。
- 没有找到完全靠谱的方法,所以自己总结一下。
解决方法:
- 现在A主机要通过ssh连接到B主机,需要在A主机上生成一个ssh公钥,然后写入到B主机的authorized_keys文件即可。
1 在root账户下生成公钥
ssh-keygen -t rsa -P ''
2 将生成的公钥先写入A主机的authorized_keys文件
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3 将A主机下的authorized_keys发送到B主机的 root账户的 ~/.ssh/
目录下
这时还没设置免密码登录,所以发送时需要输入B主机root账户的密码,我用的虚拟机装完系统后还没设置ubuntu的root账户初始密码,所以需要先设置一下。
- (1) 在B主机 输入
sudo passwd
,之后输入要设置的密码 (2) 之后A主机还是不能通过ssh输入密码的方式连接到B主机的root账户,因为ssh默认不能连接到root账户,需要更改一下B主机ssh的配置,修改
/etc/ssh/sshd_config
文件。
使用vi或gedit打开后,找到PermitRootLogin prohibit-password
,这里默认的是禁止密码登录(即禁止登录?) ,其修改为yes,即PermitRootLogin yes
,然后执行service sshd restart
重启ssh服务 ,这里好像只能用vi编辑器来修改。
修改完成后,重启B主机的ssh服务。之后测试一下,A主机能否连接到B主机,ssh node1
,然后输入密码,发现终于可以连上了。这里node1就是B主机的主机名(3) 将A主机中的公钥,发送到B主机,先在B主机的root账户下执行
ssh-keygen -t rsa
,创建一个 .ssh 目录
之后在A主机的root账户下执行
scp ~/.ssh/authorized_keys root@node1:~/.ssh/
注意这里使用scp命令发送文件到目录需要先创建一个目录,或者将A主机的authorized_keys直接发送到 B主机的~/.ssh/authorized_keys
文件中
之后修改B主机接受到的authorized_keys的权限,在B主机中执行
chmod 600 ~/.ssh/authorized_keys
到这终于实现了使用ssh无密码访问root账户。
之后还得配置其他主机,所以准备写个shell脚本。