![识别网络上多个服务器之间的 ssh 信任](https://linux22.com/image/587572/%E8%AF%86%E5%88%AB%E7%BD%91%E7%BB%9C%E4%B8%8A%E5%A4%9A%E4%B8%AA%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B9%8B%E9%97%B4%E7%9A%84%20ssh%20%E4%BF%A1%E4%BB%BB.png)
问题:
我们有许多 dev/qa/prod RH/Solaris 服务器,其中许多帐户之间具有 ssh 信任,包括不同环境中的服务器之间(prod->prod,还有 qa->prod)。我知道这是一种不好的做法,我试图解决它的第一步是了解哪些盒子上的哪些帐户可以 ssh 到哪些盒子上的哪些其他帐户而无需密码。
我的方法是使用一个 shell 脚本来登录到指定的服务器列表,并sudo
通过 /etc/passwd 文件获取所有帐户和主目录的列表,查看后者是否存在.ssh
和id_rsa.pub
/或id_dsa.pub
和authorized_keys
并将每个帐户每个框的这些信息输出到stdout
运行脚本的机器上。
用户可以指定 ssh 使用非默认密钥,这是一个公认的限制。(我认为事实并非如此)
然后使用输出创建一个 html 页面,其中包含从上面的输出创建的 JavaScript 对象 {username, machine_name, rsa_key, dsa_key, authorized_keys[]},并使用 JQuery(或类似)显示层次结构(如何待定)。
我的问题是,是否已经存在解决此类问题的方法?如果没有,欢迎对我的方法提出任何意见。
答案1
看起来你很清楚自己在这里做什么。记录哪些系统可以连接到没有密码的东西总是一个好主意。这样做不一定是坏习惯,事实上,做某些事情是必须的,但你需要知道如果有人闯入你的某个服务器,这一切是如何运作的——他们还能访问什么?
一个值得查看的地方是所有服务器上的身份验证日志。这将告诉您当前脚本/程序实际使用了哪些密钥。
SSHd 确实会告诉您用户如何登录。在日志中您应该会看到如下一行:
Accepted publickey for automatedprocess from 123.456.789.012 port 12345 ssh2
查看日志并查找日志所在服务器、用户名和发件人地址的所有唯一组合,将显示哪些系统一直在使用这些密钥。
这也可能为您提供一个良好的起点,让您了解哪些不再需要,哪些是自动化流程经常使用的。