【问题标题】:How to verify multiple server's root password using bash script?如何使用 bash 脚本验证多个服务器的 root 密码?
【发布时间】:2015-11-20 04:32:10
【问题描述】:

我有两个文本文件,一个是服务器名称列表,另一个是根密码(唯一密码)

我必须通过登录到各个服务器来检查所有服务器的 root 密码。但问题是,默认情况下禁用 ssh root 登录。因此,我必须通过我的普通用户(测试)登录并以 root 身份切换并尝试文本文件中提到的 root 密码。

有什么办法可以让这个自动化吗?非常感谢有人可以帮助我。

【问题讨论】:

  • 试试sshpass。将密码保存在文本文件中,并自动设置密码是不好的做法。
  • 但是 sshpass 会以普通用户身份登录。不知道如何在登录和验证root密码后进行验证。

标签: bash shell


【解决方案1】:

Linux 密码存储在/etc/shadow 文件中。
它们只是散列的纯文本,没有魔法。
看看python的crypt.crypt()函数。

# change 'root' password to 'secret' (demo only)
$ echo root:secret | chpasswd
Password for 'root' changed

# get 'root' hashed password
$ grep root /etc/shadow
root:$6$YvK0oNOm$k.zELztgUM2LajbVGsqtp5I3mGP3clC6vL7rNdVCNfg2FUtLOnfb94Bn6acfCp4cQpXxSAZ1Zt55K8rAgQ3nT0:16673:0:::::

# verify hashed password is correct
$ python -c 'import crypt; print crypt.crypt("secret", "$6$YvK0oNOm$") == "$6$YvK0oNOm$k.zELztgUM2LajbVGsqtp5I3mGP3clC6vL7rNdVCNfg2FUtLOnfb94Bn6acfCp4cQpXxSAZ1Zt55K8rAgQ3nT0"'
True

您可以从所有服务器收集影子文件,并在本地验证它们。
警告:影子文件非常敏感。


这是一个简单的解决方案。

input.csv

192.168.1.1,secret,$6$YvK0oNOm$k.zELztgUM2LajbVGsqtp5I3mGP3clC6vL7rNdVCNfg2FUtLOnfb94Bn6acfCp4cQpXxSAZ1Zt55K8rAgQ3nT0
192.168.1.2,pAssWd,$6$AbcdeFgh$1234fsXXXXXXXXXXXsqtp5I3mGP3clC6vL7rNdVCNfg2FUtLOnfb94Bn6acfCp4cQpXxSAZ1Zt55K8rAgQ3nT0
192.168.1.3,123456,$6$efsjdsix$8787sdfsdsdfsd232sqtp5I3mGP3clC6vL7rNdVCNfg2FUtLOnfb94Bn6acfCp4cQpXxSAZ1Zt55K8rAgQ3nT0

check.py

import csv, crypt
for i, j, k in csv.reader(open('input.csv')):
    if crypt.crypt(j, k) != k:
        print i

结果

$ python check.py
192.168.1.2
192.168.1.3

【讨论】:

  • 谢谢,这是我在测试盒上测试过的。我可以从所有服务器获取所有影子文件的信息。但是,在获得如何自动化验证过程之后。执行我,我对脚本非常陌生。任何线索都会帮助我。
  • @Saravanan 尝试生成一个包含 3 列的 csv 文件:ipaddress,password,hash,然后为每一行调用 crypt(),打印坏行。
  • 感谢 Kev,正如我所建议的那样,我创建了带有服务器 Ipaddress、密码和哈希(影子文件)的 CSV 文件。我如何调用 crypt () 函数。很抱歉,我不确定如何调用函数。我试图通过 Google 和 stackoverflow 找到答案。但是,在这里问你。你能告诉我如何在python命令中调用哈希和密码吗?
  • 感谢您的回复,我尝试了您更新的脚本以在其中一个测试盒上本地验证 root 密码。但是,似乎我的结果是错误的。 Input.csv 192.168.1.100,wrongpassword,$6$PiM.5FblFtp2iEX9$7y.SmYHunzzznZrEUd15WCOuWWmDWlnLbOj7sIiHsfaAKYqns9BI7eCKUW849G.qUJ44j4ZFVloQ6D3em2Oz9 #python check.py 192.168.1.1.该测试盒的密码是“redhat”。我做错什么了吗?如果我做错了,请纠正我。
  • @Saravanan 你需要在 linux 平台上运行这个脚本。请制作两个测试用例(对+错)。它会打印错误的。如果一切正常,它不会打印任何内容。
猜你喜欢
  • 2011-03-02
  • 1970-01-01
  • 2017-07-11
  • 2019-11-24
  • 1970-01-01
  • 2021-06-09
  • 2015-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多