首页 > 解决方案 > 无法使用从本地文件读取的正确凭据(用户名和密码)对 SSH 服务器进行身份验证

问题描述

我正在制作一个连接到 SSH 服务器的小程序,测试 .txt 文件中的多个用户名和密码。我遇到的问题是,当它获得正确的用户名和密码时它无法连接,或者至少我的if声明没有正确地说出来。

如果我确实将它作为常规变量传递或只是设置username = 'correct user' ,password = 'correct password',它可以工作。这是代码的一部分,我正在使用 Linux VM 在本地环境中进行测试:

# read files
fs = open('users.txt','r')
users = fs.readlines()
fs.close()
fs = open('passwords.txt','r')
psswds = fs.readlines()
fs.close()

# connect and test the password
for user in users:
    for psswd in psswds:
        try:        
            print(usuario)
            print(senha)
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            con = ssh.connect(ip,port,username = user,password = psswd)
            if con is None:
                print ('yes')
                break
            else:
                print ('nop')
            SSHClient.close()
        except paramiko.AuthenticationException:
            print('User and/or password incorrect')

标签: pythonarrayssshparamikoreadlines

解决方案


当您使用readlines时,它会在行中保持尾随换行符。

因此,您实际上使用了错误的凭据进行连接,因为您的用户名和密码都包含新行,这不是正确凭据的一部分。

请参阅使用 .readlines() 时摆脱 \n


推荐阅读