Python 如何在没有登录信息的情况下验证SSH连接是否可行?

Python 如何在没有登录信息的情况下验证SSH连接是否可行?,python,ssh,exception-handling,paramiko,Python,Ssh,Exception Handling,Paramiko,我正在尝试编写一个python2.7函数,它可以告诉您是否可以使用SSH协议连接到特定的IP地址(主机)。问题是我必须在没有连接到的设备的登录信息的情况下进行操作。我的计划是尝试使用空字符串作为用户名和密码进行连接,然后使用它引发的异常来确定它是否可以连接。我的推理是,如果它抛出一个AuthenticationException,那么它必须尝试连接,但只是确定登录信息无效。这是我目前的代码: def ssh(host): try: s = paramiko.SSHClient()

我正在尝试编写一个python2.7函数,它可以告诉您是否可以使用SSH协议连接到特定的IP地址(主机)。问题是我必须在没有连接到的设备的登录信息的情况下进行操作。我的计划是尝试使用空字符串作为用户名和密码进行连接,然后使用它引发的异常来确定它是否可以连接。我的推理是,如果它抛出一个AuthenticationException,那么它必须尝试连接,但只是确定登录信息无效。这是我目前的代码:

def ssh(host):
try:
    s = paramiko.SSHClient()
    s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    s.connect(host, username=None, password=None)

except(paramiko.ssh_exception.AuthenticationException,
       paramiko.ssh_exception.BadAuthenticationType,
       paramiko.ssh_exception.BadHostKeyException,
      paramiko.ssh_exception.PasswordRequiredException,
      paramiko.ssh_exception.PartialAuthentication):
    return True

except Exception as e:
    print(e)
    return False
当我运行它时,它总是返回false并输出:
没有可用的身份验证方法

我的问题是:

  • 这是实现我想要的目标的可行策略吗
  • 哪些异常是由错误的凭据引起的,哪些是由更严重的问题引起的,即使使用正确的凭据也会阻止连接
  • 哪个功能正在打印到控制台,如何停止打印?我想自己处理错误消息

  • 提前谢谢

    只需尝试在目标端口上连接:

    import socket
    
    def check_ssh(server_ip, port=22):
        try:
            test_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            test_socket.connect((server_ip, port))
        except Exception, ex:
            # not up, log reason from ex if wanted
            return False
        else:
            test_socket.close()
        return True
    

    只需尝试在目标端口上连接:

    import socket
    
    def check_ssh(server_ip, port=22):
        try:
            test_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            test_socket.connect((server_ip, port))
        except Exception, ex:
            # not up, log reason from ex if wanted
            return False
        else:
            test_socket.close()
        return True
    

    如果您试图查看ssh是否正在侦听和接受连接,您可以尝试在端口22上远程登录到它,以查看它是否正在侦听?我是否会遇到需要登录信息来建立远程登录连接的相同问题?如果您试图查看ssh是否在侦听和接受连接,您可以尝试在端口22上远程登录到它,以查看它是否正在侦听?我是否会遇到同样的问题,即需要登录信息来建立远程登录连接?这正是我试图做的。我只是没有意识到,哈哈。谢谢你的帮助!这正是我想做的。我只是没有意识到,哈哈。谢谢你的帮助!