Python实现SSH批量登录并执行命令

作者:蛮不讲李2024.01.08 08:42浏览量:16

简介:本文将介绍如何使用Python实现SSH批量登录并执行命令,以便自动化管理远程服务器。

在Python中,可以使用paramiko库实现SSH批量登录并执行命令。paramiko是一个用于实现SSHv2协议的纯Python库,可用于连接和管理远程服务器。
首先,确保已经安装了paramiko库。如果没有安装,可以通过以下命令进行安装:

  1. pip install paramiko

接下来,我们编写一个Python脚本,实现SSH批量登录并执行命令。在此示例中,我们将使用一个包含服务器IP地址和用户名/密码的列表来批量登录服务器。

  1. import paramiko
  2. # 定义服务器列表,包括IP地址、用户名和密码
  3. servers = [
  4. ('192.168.0.1', 'username1', 'password1'),
  5. ('192.168.0.2', 'username2', 'password2'),
  6. # 添加更多服务器...
  7. ]
  8. # 定义要执行的命令列表
  9. commands = [
  10. 'ls',
  11. 'df -h',
  12. # 添加更多命令...
  13. ]
  14. # 遍历服务器列表,逐个登录并执行命令
  15. for server in servers:
  16. ip, username, password = server
  17. ssh = paramiko.SSHClient()
  18. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 自动添加主机密钥
  19. try:
  20. ssh.connect(ip, username=username, password=password) # 建立SSH连接
  21. for cmd in commands: # 遍历要执行的命令列表
  22. stdin, stdout, stderr = ssh.exec_command(cmd) # 执行命令
  23. output = stdout.read().decode() # 读取命令输出
  24. print(f'Server: {ip}
  25. Command: {cmd}
  26. Output:
  27. {output}
  28. ') # 打印输出结果
  29. except paramiko.AuthenticationException: # 处理认证异常
  30. print(f'Authentication failed for server {ip}')
  31. except paramiko.SSHException as e: # 处理SSH连接异常
  32. print(f'Failed to establish SSH connection for server {ip}: {e}')
  33. finally:
  34. ssh.close() # 关闭SSH连接

在上面的代码中,我们首先定义了服务器列表和要执行的命令列表。然后,我们使用一个for循环遍历服务器列表,并使用paramiko库建立SSH连接。在连接成功后,我们遍历要执行的命令列表,并使用exec_command方法执行每个命令。最后,我们读取命令输出并打印结果。在处理过程中,我们还添加了一些异常处理逻辑来处理认证和SSH连接异常。
请注意,以上代码仅提供了一个基本的框架,你可能需要根据实际情况进行修改和扩展。例如,你可以添加更详细的错误处理逻辑、使用公钥身份验证而不是密码、并发执行多个命令等。此外,还要注意保护敏感信息,如密码,以防止安全漏洞。