You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()

关键逻辑说明

  1. 密码循环替代多else:
    把密码存入列表后,用for循环逐个尝试,密码验证失败就自动进入下一次循环,完全不需要嵌套if-else——这种写法不仅简洁,后续要新增/删除密码时,只需要修改PASSWORD_LIST即可,不用调整核心逻辑。

  2. 异常处理优化:

    • 捕获AuthenticationException专门处理密码错误的情况,确保只有密码错了才继续尝试下一个密码;
    • 捕获连接超时、SSH异常等,直接放弃当前IP,避免脚本卡住。
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:02:45