當超過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設置密碼. 不在本文講述范圍.
注意: 本文雖然混合大小寫, 你應該任何時候只用小寫字母.