2015-08-26 3 views
0

У меня есть два текстовых файла со списком имен серверов, еще один файл с их корневым паролем (уникальный пароль)Как проверить пароль для нескольких серверов, используя скрипт bash?

Мне нужно проверить весь корневой пароль сервера, выполнив вход на отдельные серверы. но проблема в том, что по умолчанию ssh root login отключен. Следовательно, я должен войти в систему через моего обычного пользователя (Test) и переключиться с правами root и попробовать пароль root, упомянутый в текстовом файле.

есть ли способ, которым я могу получить это автоматическое? высоко ценим, если кто-нибудь может мне помочь.

+0

попробовать 'sshpass'. Хранение паролей в текстовых файлах и автоматизация паролей - плохая практика. – shanmuga

+0

Но sshpass войдет в систему как обычный пользователь. не уверены, как проверить после регистрации и проверить пароль root. – Saravanan

ответ

0

Пароли Linux хранятся в файлах /etc/shadow.
Они просто хэшированные тексты, без магии.
Посмотрите на функцию crypt.crypt() python.

# 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 
+0

Спасибо, это работает, я тестировал на тестовой коробке. Я могу получить всю информацию теневого файла со всех серверов. Но после того, как я могу автоматизировать процесс проверки. Execuse me, я очень новичок в написании сценариев. любые выводы помогут мне. – Saravanan

+0

@Saravanan Попробуйте создать файл csv, который содержит 3 столбца: 'ipaddress, password, hash', а затем вызовите' crypt() 'для каждой строки, напечатайте неверные строки. – kev

+0

Спасибо, Kev, как и предполагалось, я создал файл CSV с сервером Ipaddress, паролем и хэшем (теневым файлом). как я могу назвать функцию crypt(). Мне очень жаль, что я не уверен, как вызвать функцию. Я попытался найти ответ через Google и stackoverflow. но, закончил вас здесь, спрашивая вас. можете ли вы сообщить мне, как вызывать хэш и пароль в команде python? – Saravanan