Python多else条件实现:多密码逐次尝试IP代理安装脚本需求
多密码循环尝试的Python代理安装脚本实现
我来帮你搞定这个需求!核心思路是把所有密码放到一个列表里,对每个IP遍历所有密码尝试验证,直到找到可用的密码为止——完全不用搞复杂的多else嵌套,用循环就足够清晰且易维护。
以下是完整的可运行脚本,我基于你的代码片段补全了逻辑,还加上了常用的SSH远程操作(假设你用SSH连接目标IP安装代理):
import paramiko from paramiko.ssh_exception import AuthenticationException, SSHException # 替换成你的5-6个密码 PASSWORD_LIST = ["your_pass_1", "your_pass_2", "your_pass_3", "your_pass_4", "your_pass_5"] # 替换成你的代理安装实际命令(根据目标系统调整,比如yum、brew等) PROXY_INSTALL_COMMAND = "apt update && apt install -y squid" # 远程连接的用户名(默认root,可根据实际修改) REMOTE_USER = "root" def attempt_proxy_install(ip): """对单个IP尝试所有密码,完成代理安装""" ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) for idx, password in enumerate(PASSWORD_LIST, 1): try: print(f"[{ip}] 第{idx}次尝试,使用密码: {password}") # 尝试SSH连接 ssh_client.connect( hostname=ip, username=REMOTE_USER, password=password, timeout=12 ) # 验证成功,执行代理安装命令 print(f"[{ip}] 密码验证成功,开始安装代理...") stdin, stdout, stderr = ssh_client.exec_command(PROXY_INSTALL_COMMAND) # 等待命令执行完成,获取执行状态 exit_code = stdout.channel.recv_exit_status() if exit_code == 0: print(f"✅ [{ip}] 代理安装成功!") # 将成功的IP追加到SucessfullIp.txt with open('/root/nix_bsd_mac_inventory-master/SucessfullIp.txt', 'a') as success_file: success_file.write(f"{ip}\n") else: print(f"❌ [{ip}] 代理安装失败,错误信息: {stderr.read().decode().strip()}") # 关闭连接,结束该IP的处理 ssh_client.close() return except AuthenticationException: print(f"[{ip}] 密码 {password} 验证失败,继续下一个...") continue except (SSHException, TimeoutError, ConnectionRefusedError) as e: print(f"⚠️ [{ip}] 连接出错: {str(e)},放弃该IP") ssh_client.close() return # 所有密码都尝试失败 print(f"❌ [{ip}] 所有密码均验证失败,跳过该IP") def main(): # 读取Unique.txt中的IP(过滤空行并去重) with open("/root/nix_bsd_mac_inventory-master/Unique.txt") as fp: ip_list = list({line.strip() for line in fp if line.strip()}) print(f"共读取到 {len(ip_list)} 个待处理IP") # 逐个处理IP for ip in ip_list: attempt_proxy_install(ip) print("-" * 50) if __name__ == "__main__": main()
关键逻辑说明
密码循环替代多else:
把密码存入列表后,用for循环逐个尝试,密码验证失败就自动进入下一次循环,完全不需要嵌套if-else——这种写法不仅简洁,后续要新增/删除密码时,只需要修改PASSWORD_LIST即可,不用调整核心逻辑。异常处理优化:
- 捕获
AuthenticationException专门处理密码错误的情况,确保只有密码错了才继续尝试下一个密码; - 捕获连接超时、SSH异常等,直接放弃当前IP,避免脚本卡住。
- 捕获
IP去重与成功记录:
- 读取Unique.txt时用集合去重,避免重复处理同一个IP;
- 代理安装成功后,自动把IP追加到SucessfullIp.txt,方便后续跟踪。
注意事项
- 确保目标IP的SSH服务正常运行,且端口开放;
- 根据目标系统调整
PROXY_INSTALL_COMMAND(比如CentOS用yum install squid -y,macOS用brew install squid); - 如果你的代理安装需要更复杂的配置,可以把命令改成调用脚本的形式(比如
scp上传配置文件再执行安装)。
内容的提问来源于stack exchange,提问作者user9082786
相关产品推荐
相关产品推荐

