SSH(Secure Shell)是一种网络协议,用于在不安全的网络中提供加密的远程登录和执行命令。Python提供了丰富的库和模块来进行SSH连接和执行命令的操作,可以方便地进行批量测试SSH。
一、安装必要的模块
在开始之前,需要安装paramiko模块,它是一个用于SSH连接的Python模块。可以使用pip命令进行安装:
pip install paramiko
二、建立SSH连接
在使用Python进行SSH连接之前,需要先建立SSH连接。可以使用paramiko库提供的SSHClient类来实现SSH连接:
import paramiko # 创建SSH客户端对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接到远程主机 ssh.connect('host', port=22, username='username', password='password') # 执行命令 stdin, stdout, stderr = ssh.exec_command('command') # 输出命令结果 print(stdout.read().decode()) # 关闭SSH连接 ssh.close()
三、批量测试SSH
在进行批量测试SSH时,可以使用循环来迭代多个主机进行连接和执行命令。可以将主机信息存储在一个列表或者文件中:
import paramiko # 主机列表 hosts = [ {'host': 'host1', 'port': 22, 'username': 'username1', 'password': 'password1'}, {'host': 'host2', 'port': 22, 'username': 'username2', 'password': 'password2'}, {'host': 'host3', 'port': 22, 'username': 'username3', 'password': 'password3'} ] # 循环连接主机 for host in hosts: try: # 创建SSH客户端对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接到远程主机 ssh.connect(host['host'], port=host['port'], username=host['username'], password=host['password']) # 执行命令 stdin, stdout, stderr = ssh.exec_command('command') # 输出命令结果 print(stdout.read().decode()) # 关闭SSH连接 ssh.close() except Exception as e: print('连接主机 {} 出错:{}'.format(host['host'], str(e)))
四、其他操作
除了执行命令之外,paramiko模块还提供了其他一些操作,例如上传文件、下载文件和在SSH会话中交互等。
上传文件
import paramiko # 创建SSH客户端对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接到远程主机 ssh.connect('host', port=22, username='username', password='password') # 创建SFTP客户端对象 sftp = ssh.open_sftp() # 上传文件 sftp.put('local_file', 'remote_file') # 关闭SFTP连接 sftp.close() # 关闭SSH连接 ssh.close()
下载文件
import paramiko # 创建SSH客户端对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接到远程主机 ssh.connect('host', port=22, username='username', password='password') # 创建SFTP客户端对象 sftp = ssh.open_sftp() # 下载文件 sftp.get('remote_file', 'local_file') # 关闭SFTP连接 sftp.close() # 关闭SSH连接 ssh.close()
交互式操作
import paramiko # 创建SSH客户端对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接到远程主机 ssh.connect('host', port=22, username='username', password='password') # 打开SSH会话 transport = ssh.get_transport() channel = transport.open_session() # 开启交互式操作 channel.get_pty() channel.invoke_shell() # 发送命令 channel.send('commandn') # 接收输出 output = channel.recv(1024).decode() print(output) # 关闭SSH连接 channel.close() ssh.close()
通过以上的代码示例,可以用Python进行批量测试SSH,实现连接和执行命令、上传和下载文件、交互式操作等功能。