当超过3台机器搞到一起, 管理起来就会陷入混乱不堪. 因此需要证书登录的方式来管理服务器集群. master节点可以直接ssh登录到数据节点. 控制节点可以直接登录到被控制的节点.
借用C/S的概念, 客户机需要安装openssh-client, 服务器需要安装openssh-server. 其实大家很快会分布清楚哪些是服务,哪些是客户. 因此所有机器上都安装openssh, 你可以检查是否安装了它们:
$ apt-cache policy openssh-client
$ apt-cache policy openssh-server
也可以直接安装它们:
$ sudo apt-get install openssh-client
$ sudo apt-get install openssh-server
另外需要安装一个ssh无交互式密码登陆的软件sshpass, 这样大家就可以把密码写到命令行里. 从而使无人工干预的脚本安装过程成为可能.
$ sudo apt-get install sshpass
安装完毕之后, 你可以在任何一台UbuntuA访问另外一台ubuntuB
$ sshpass -p abc123 ssh car@ubuntuB
其中:
car是ubuntuB的用户名, 大家这里假设A, B用户名都是car
abc123是car的密码
借用这个技术, 你可以轻松登陆每台机器而不需要交互式地输入密码.但这绝对是不安全的, 这个仅仅是安装阶段的脚本.
ssh证书登录方式:
假设大家想要在ubuntuA访问另外一台ubuntuB, 于是大家需要在A上生成公钥密钥对. 然后把公钥拷贝到B上, 在B上把公钥加入当前用户的.ssh/authorized_keys里. 然后在A上就可以直接登录B了.
1) 在A上生成公钥密钥对
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
可以看到
/home/car/.ssh/id_rsa
/home/car/.ssh/id_rsa.pub
2个文件.
2) 把id_rsa.pub拷贝到B机器上
$ scp ./.ssh/id_rsa.pub car@ubuntuB:~/
其中ubuntuB是IP地址, 也可以是机器名, 但是需要在A的/etc/hosts增加一项:
192.168.63.101 ubuntuB
3) 登录到B
$ sshpass -p abc123 ssh car@ubuntuB
4) 添加id_rsa.pub到B的~/.ssh/authorized_keys里
$ cat ./id_rsa.pub ./.ssh/authorized_keys
$ exit
5)重新在A里登录B
$ ssh car@ubuntuB
可以看到再不需要密码了.
6) 假设你还有C,D,E,F...等机器也需要登录B, 只要把在A上生成的私钥文件id_rsa拷贝到相应的机器上就可以了.
记住,这个是不安全的操作. 一般需要给私钥文件id_rsa设置密码. 不在这篇文章讲述范围.
注意: 这篇文章虽然混合大小写, 你应该任何时候只用小写字母.