2010-04-08 37 views
0

目前我们的流程包括登录到每个* nix服务器并手动更改每个服务器的密码。我的问题是,什么是自动执行此操作的好方法?我想可能的几种不同的方法来做到这一点,并希望他人对他们推荐什么样的输入,使用等如何脚本自动根密码更改?

我想

一种方法是需要密码的服务器列表的文本文件更改和提示用户输入新密码的脚本,将其暂时存储在脚本中,然后远程连接到每台服务器并运行命令。有一个检查,以确保服务器可达或远程连接超时将是一个好主意。然后输出到控制台,以便运行脚本的人可以看到哪些服务器成功了,哪些服务器不成功。

我想尝试的另一种完全自动化的解决方案,但也想不出来安全地存储新密码的好方法。另外,对于我来说,进行一些用户交互并不得不手动启动脚本,因为我们只需要每年进行6次这样的操作。

任何想法,帮助,想法都将被大大地掩盖。

回答

2
openssl passwd -1 $rootpw 

其中$ rootpw包含将是您的root密码的字符串。

这将输出,你可以只把文件或任何在加密后的字符串。我在一个脚本上使用它来设置从数据库供应的虚拟服务器实例。我在通过网络发送它之前计算这个散列,因此设置服务器的脚本可以使用这个散列,而不必发送纯文本。

要回答你的问题,每个服务器将计算哈希值略有不同,并导致不同的哈希,但所有这些散列将等同于相同的密码。您可以使用这些散列中的任何一个,并且在任何服务器上使用时,它们在功能上都是等效的,即使散列的实际内容不同。

例如,我散列foobar的,并且这些是结果:

rootpw=foobar 
openssl passwd -1 $rootpw 
$1$6pXamKGD$TKQqON1prArop7DpLOyAk1 

openssl passwd -1 $rootpw 
$1$4A4Mn16f$P7ap2AqNMRK8m72bG/Bve0 

openssl passwd -1 $rootpw 
$1$DyhsWEMX$i2wH6JpAqoHNFZ0YOBVHj/ 

openssl passwd -1 $rootpw 
$1$m27FIj5e$LZPxVniAeUoZcuUoNHK8c/ 

openssl passwd -1 $rootpw 
$1$qdX0NKm1$45rzxUj..LCJwWB/.fwGH0 

在同一台机器上计算,但它们中的任何可被用于等同于密码即使当每个那些散列的是不同的“foobar的'在任何机器上。

因此,只要打开/ etc /你找到行的阴影并粘贴在那里:

root:$1$qdX0NKm1$45rzxUj..LCJwWB/.fwGH0:14415:0:99999:7::: 

在我的剧本我爆发,在:的和更新的元素[1],然后将数组回到一个字符串并替换文件中的字符串。如果你愿意,你可以以不同的方式做,特别是如果你知道旧值(你可以通过将它分解成数组来获得)。

我知道这个问题是一个几个月大的,所以你可能理解了它,但我把这个在那里为任何未来的Google员工磨磨蹭蹭并发现这一点。

+0

如果您拥有异构基础架构,那很好。但是如果你的“服务器”涉及各种版本和操作系统,这是行不通的。 – 2012-06-13 14:29:21

0

您应该计算哈希什么是您的服务器计算上的密码,并发送在这个担保,散列形式的密码,随时准备投入/etc/shadow。然而,我不知道如何在实践中如何去做到这一点。

+0

感谢您的回复Pajton! 每个服务器都会以同样的方式计算哈希值吗?如果不是这样,我认为这是一个非常复杂的过程,可以为每台服务器计算散列值,并在每台服务器上都有一个单独的影子文件替换。由于涉及的复杂性,我想摆脱这种情况。特别是因为我将把这项工作交给分技术小组。 :) – Webs 2010-04-08 16:09:54

+0

我相信这是可配置的,所以每个服务器可以使用相同的计算哈希方式(尤其是如果他们只使用默认配置并且是相同的OS-es)。例如,对于Apache,有一个工具'htpasswd',用于计算密码的散列,然后将其添加到密码文件(相当于'/ etc/shadow')。所以,我认为应该有类似的系统密码。 – pajton 2010-04-09 10:28:52

+0

好的,谢谢,我会再看一次。 – Webs 2010-04-10 13:04:41