腾讯第二代CVM用公钥免密码登录相同APPID的机器

SHELLLINUX2013-11-24 22:15

之所以特意说明是第二代CVM,是因为第一代CVM使用dsa公钥认证,并且添加方法和第二代的有些出入。
另外使用公钥而不是使用expect写脚本通过密码登录,是因为user_00的密码每时每刻都在改变,这可以通过/var/log/secure日志发现。

接下来就是设置的方法,我使用的是user_00的权限,当然如果想作死也是可以使用root的:(控制机为X,受控机为A、B、C)

1、在控制机X上使用user_00权限生成密钥对,保存在/home/user_00/.ssh/id_rsa中:
$ mkdir -p ~/.ssh && ssh-keygen -t rsa -b 2048

2、用sz命令把控制机X上user_00用户的公钥下载回来:
$ sz ~/.ssh/id_rsa.pub

3、把这个id_rsa.pub通过ftp或者rz命令上传到受控机A、B、C上:以下这条命令是在受控机上
$ mkdir ~/.ssh && cat ./id_rsa.pub >> ~/.ssh/authorized_keys

4、以上及以下这条命令都是在受控机A、B、C上,现在提权为root权限:看清是root权限了
$ sudo su

5、因为PAM的设置会影响到CVM的域名绑定以及SSH的登录,所以不能关掉,只能增加特权用户:
# echo user_00 >> /etc/sshd_special_user

6、最后重启下A、B、C机器上的SSH服务就可以了:(都要执行,也可以用reload重载)
# service sshd restart

7、接着回到控制机X上,测试看看能否显示A机器的主机名:现在是X机的user_00权限
$ ssh -p 36000 -q "A机器的IP" hostname

因为默认1024长度的密钥不够安全,所以使用了更长的密钥生成命令。
另外如果还是不能免密码登录,请重新确认以上步骤,并且确认~/.ssh目录及相应文件权限的正确性,不懂则可以放狗搜索相应的权限配置。


以下是附注,即PS内容:
因为按网上资料配置后还是无法登录,所以我就把受控机A、B、C上的PAM认证关掉了:
sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config && service sshd restart
结果导致了在网页管理后台绑定CVM的域名时出错,联系腾讯的技术支持了解到域名的绑定需要PAM的开启。
不过这也没什么,反正平时要绑域名的情况不多,所以绑的时候可以再用以下命令把PAM重新开启:
sed -i 's/UsePAM no/UsePAM yes/g' /etc/ssh/sshd_config && service sshd restart

以为这就到结尾了?错了,不然就不会有上面步骤里面说的添加特权用户的事了。
而就在我们把域名都绑好,把PAM关掉后,第二天所有的CVM都无法SSH登录,只能联系腾讯技术从母机登录CVM后开启PAM才恢复正常。
也是因为经过了上面的小插曲,我才找到增加特权用户这个方法,说起来原因就是因为这个sshd_special_user文件名看着奇怪,并且有root和admin在里面。


原文链接: http://blog.jtwo.me/tencent-cvm-use-pubkey-login-same-appid-servers