Paramiko身份验证验证(原来是Python异常处理)

7 投票
1 回答
7914 浏览
提问于 2025-04-16 19:42

我正在用Python写一个脚本,这个脚本通过Paramiko库来连接Cisco路由器,获取配置文件。我的目标是确保登录信息是正确的,但又不想让程序直接崩溃。

现在,如果我输入的登录信息是正确的,代码就能成功连接并执行我想要的命令,太棒了!但是,如果我输入错误的登录信息,脚本就会因为认证错误而失败。

代码如下:

ip = *.*.*.*
u = username
p = password


ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(ip, username=u, password=p)

shell = ssh.invoke_shell()

当我启动程序并输入错误的登录信息时,输出结果是这样的:

paramiko.AuthenticationException: 认证失败。

我知道这是因为登录信息不对,但我不希望脚本就这样失败。我希望它能显示出问题,并继续执行后面的代码。

有没有什么好主意?

1 个回答

8

看看Python手册的第8.3节(处理异常)。你可以“捕捉”异常并处理它,这样就能防止异常导致你的程序退出。只有当没有代码去捕捉这个异常时,你的程序才会因为异常而退出。

try:
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(ip, username=u, password=p)
    shell = ssh.invoke_shell()
except paramiko.AuthenticationException:
    print "We had an authentication exception!"
    shell = None

不过,你需要编写代码,确保当shellNone的时候,程序不会出错。

撰写回答