获取Linux集群免登陆权限
假如有100台服务器,每次都用ssh输入用户名密码的方式登录,这样输入用户名密码就成为一件繁重的工作。
这时候,可以考虑利用主服务器的公钥在各个服务器间登录,避免输入密码。接下来是具体的操作步骤:
生成公私钥对
首先,需要在主服务器上用ssh-keygen生成一个公私钥对,然后把公钥写入需要管理的每一台机器的authorized_keys文件中。如下图所示:我们使用ssh-keygen在主服务器中生成公私钥对。

- 使用mkdir -p创建~/.ssh目录,-p的优势是当目录不存在时,才需要创建,且不会报错。
- 用cd切换到.ssh目录,然后执行ssh-keygen。这样会在~/.ssh目录中生成两个文件,id_rsa.pub公钥文件和is_rsa私钥文件。

可以看到id_rsa.pub文件中是加密的字符串,我们可以把这些字符串拷贝到其他机器对应用户的~/.ssh/authorized_keys文件中,当ssh登录其他机器的时候,就不用重新输入密码了。
分发公钥
我们已经在主服务器生成了公私钥,接下来就需要将公钥分发到其他服务器。这个传播公钥的能力,可以用一个shell脚本执行,这里我用transfer_key.sh实现。
首先我们先写一个foreach.sh脚本来批量执行,并写一个transfer_key.sh配合foreach.sh的工作。
foreach.sh
| 1 | 
 | 
tranfer_key.sh
| 1 | #注意:“=”左右两边不能有空格 | 
- 在foreach.sh中我们执行 transfer_key.sh,并且将 IP 地址通过参数传递过去。
- 在 transfer_key.sh 中,用$1读出 IP 地址参数, 再将公钥写入变量pubkey,然后登录到对应的服务器,执行多行指令。
- 用mkdir指令检查.ssh目录,如不存在就创建这个目录。最后我们将公钥追加写入目标机器的~/.ssh/authorized_keys中。
chmod 700和chmod 600是因为某些特定的linux版本需要.ssh的目录为可读写执行,authorized_keys文件的权限为只可读写。而为了保证安全性,组用户、所有用户都不可以访问这个文件。
给两个文件赋予可执行权限chmod +x,执行foreach.sh需要输入两次密码。

完成上述操作后,我们再登录这两台服务器就不需要输入密码了。我们来尝试一下:

大功告成 ^ - ^
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 被咬了一口の包子°!
 评论







