Pour écrire un module Ansible personnalisé qui teste les connexions SSH sur les ports 77 et 22 avec les utilisateurs sysadm ou root, vous pouvez suivre ces étapes :
Créez un fichier Python pour le module, par exemple
test_ssh_conn.py
, et placez-le dans un répertoire approprié pour les modules personnalisés.Dans ce fichier, importez les bibliothèques nécessaires et définissez les fonctions pour établir et tester la connexion SSH.
Utilisez la bibliothèque Paramiko pour gérer les connexions SSH.
Voici un exemple de module Ansible personnalisé pour effectuer cette tâche :
python#!/usr/bin/python
from ansible.module_utils.basic import AnsibleModule
import paramiko
import socket
def test_ssh_connection(host, port, username, password, timeout=5):
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, port=port, username=username, password=password, timeout=timeout)
ssh.close()
return True
except (paramiko.AuthenticationException, paramiko.SSHException, socket.error):
return False
def main():
module = AnsibleModule(
argument_spec=dict(
host=dict(type='str', required=True),
ports=dict(type='list', elements='int', required=False, default=[22, 77]),
users=dict(type='list', elements='str', required=False, default=['sysadm', 'root']),
password=dict(type='str', required=True, no_log=True)
)
)
host = module.params['host']
ports = module.params['ports']
users = module.params['users']
password = module.params['password']
results = {}
for port in ports:
for user in users:
if test_ssh_connection(host, port, user, password):
results[f"{user}@{host}:{port}"] = "success"
else:
results[f"{user}@{host}:{port}"] = "failed"
module.exit_json(changed=False, results=results)
if __name__ == '__main__':
main()
- Utilisez ce module dans un playbook Ansible, en fournissant les paramètres nécessaires :
yaml---
- name: Test SSH connections
hosts: localhost
tasks:
- name: Test SSH connections on ports 22 and 77 with sysadm and root users
test_ssh_conn:
host: example.com
password: my_password
register: result
- name: Display results
debug:
var: result.results
Ce playbook utilise le module personnalisé test_ssh_conn
pour tester les connexions SSH sur les ports 22 et 77 avec les utilisateurs sysadm et root, puis affiche les résultats.