R.Eric Kiser
Saya terus berupaya menyederhanakan proses dan mengoptimalkan efisiensi. Melakukan tugas-tugas biasa dan berulang-ulang dapat dengan cepat menjadi membosankan dan membosankan. Terkadang, klien meminta penilaian komprehensif yang memerlukan eksploitasi menyeluruh dan pengumpulan data di berbagai sistem. Meskipun membangun pijakan menggunakan alat seperti impacket biasanya mudah, pengumpulan data secara manual dari berbagai sistem dapat memakan waktu dan tidak menarik. Meski demikian, saya mengutamakan memberikan hasil berkualitas tinggi sesuai dengan ekspektasi klien. Pada artikel ini, saya akan menunjukkan kepada Anda bagaimana saya menggunakan Python dan Ansible untuk mengelola beberapa server Linux dan mengumpulkan data sensitif dari satu lokasi.
Jika Anda belum pernah mendengar tentang Ansible, saya sarankan untuk melihatnya lebih dekat. Alat manajemen Linux sumber terbuka ini sederhana dan ramah pengguna. Ansible menggunakan buku pedoman, yang ditulis dalam bahasa YAML, membuatnya sangat mudah dibaca dan dipahami.
Pertama-tama kami akan mengimpor modul subproses yang memungkinkan Anda menjalankan perintah shell dari dalam skrip Python kami.
import subprocess
Kita dapat menggunakan fungsi subprocess.call()
untuk menjalankan perintah shell yang memperbarui daftar paket dan menginstal Ansible. Seperti biasasudo
digunakan untuk memastikan bahwa perintah dijalankan dengan hak administratif.
subprocess.call(["sudo", "apt-get", "update"]) subprocess.call(["sudo", "apt-get", "install", "ansible"])
Kami ingin skrip meminta nama atau alamat IP server Linux untuk mencari file. Fungsi input()
menampilkan prompt ke dan menunggu nama server atau IP (dipisahkan koma). Kami kemudian membagi masukan yang dipisahkan koma menjadi daftar nama server atau alamat IP menggunakan metode split()
. Kami juga ingin menanyakan jenis file yang ingin kami cari, seperti .conf
atau .pem
.
servers = input("Enter server names or IPs (comma separated): ").split(",") filetype = input("Enter file type to search for: ")
Selanjutnya kita akan membuat string perintah yang Mungkin menggunakan fitur f-string
dari Python. Perintah ini menggunakan perintah ansible
untuk menjalankan pedoman Ansible di server yang ditentukan, menggunakan modul find
untuk mencari file. Opsi -a
digunakan untuk meneruskan parameter pencarian, termasuk jenis file yang akan dicari. Fungsi subprocess.check_output()
menjalankan perintah dan mengembalikan hasilnya. Kami meneruskan opsi shell=True
untuk menunjukkan bahwa kami menjalankan perintah shell. Mari kita juga membuat prompt yang menunjukkan apakah kita ingin menyimpan file yang ditemukan ke lokasi tertentu. Jika tidak, skrip akan mencetak path lengkap ke layar.
command = f"ansible {' '.join(servers)} -m find -a 'path=/ recurse=yes patterns={filetype}'" result = subprocess.check_output(command, shell=True) save_to_file = input("Do you want to save the discovered files to a file location? (y/n) ")
Jika kita memilih untuk menyimpan file yang ditemukan, fungsi open()
akan membuka file dengan mode tulis ("w"
), menulis string result
yang didekodekan ke file, dan menutup file.
if save_to_file == "y": file_path = input("Enter file path to save the discovered files: ") with open(file_path, "w") as f: f.write(result.decode()) else: print(result.decode())
Hanya itu saja! Menggabungkan Ansible dan Python menawarkan banyak kemungkinan. Meskipun perangkat yang saya bagikan bersifat dasar, saya sangat menyarankan untuk membuat menu numerik dalam skrip Python Anda yang memungkinkan Anda menyelesaikan berbagai tugas, termasuk menulis file (seperti kunci atau kartu panggil) atau menjalankan perangkat lunak penangkap paket. Tepuk tangan, ikuti, dan bagikan jika Anda menyukai artikel ini dan Selamat Berburu!
import subprocess # Install Ansible subprocess.call(["sudo", "apt-get", "update"]) subprocess.call(["sudo", "apt-get", "install", "ansible"]) # Prompt for server names or IPs servers = input("Enter server names or IPs (comma separated): ").split(",") # Prompt for the file type to search for filetype = input("Enter file type to search for: ") # Run Ansible playbook to search for files on servers command = f"ansible {' '.join(servers)} -m find -a 'path=/ recurse=yes patterns={filetype}'" result = subprocess.check_output(command, shell=True) # Prompt to save the discovered files to a file location save_to_file = input("Do you want to save the discovered files to a file location? (y/n) ") if save_to_file == "y": # Prompt for file path to save the discovered files file_path = input("Enter file path to save the discovered files: ") with open(file_path, "w") as f: f.write(result.decode()) else: # Print the full path of the discovered files in the terminal print(result.decode())