Ubuntu ssh 无密码登录


当超过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设置密码. 不在本文讲述范围.

注意: 本文虽然混合大小写, 你应该任何时候只用小写字母.

相关内容