paramiko SSHClient connect stuck
Question: i have 3 source code(main and imported from it).

## test.py - just import file

    
    
    import test_child
    

## test_child.py - call function defined in imported file

    
    
    import test_grandchild
    
    test_grandchild.check_sshd()
    

## test_grandchild.py - define function

    
    
    import paramiko
    
    def check_sshd():
        client = paramiko.SSHClient()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        print('checking ssh connection to local host')
        client.connect('127.0.0.1')
        client.close()
        print('finished')
    

check_ssd() is a fucntion just for checking sshd is running on localhost, So
it is my expecting that Authentication execption occur when sshd is not
running, otherwise socket error. When i run test_child.py, result is in my
expecting. but paramiko client get stucked on connect() and I have to
terminate the process.

    
    
    $ python test.py                                                                        
    checking ssh connection to local host
    ^CTraceback (most recent call last):
      File "test.py", line 4, in <module>
        import test_child
      File "/root/tests/test_child.py", line 6, in <module>
        test_grandchild.check_sshd()
      File "/root/tests/test_grandchild.py", line 10, in check_sshd
        client.connect('127.0.0.1')
      File "build/bdist.linux-x86_64/egg/paramiko/client.py", line 242, in connect
      File "build/bdist.linux-x86_64/egg/paramiko/transport.py", line 342, in start_client
      File "/usr/lib64/python2.7/threading.py", line 621, in wait
        self.__cond.wait(timeout, balancing)
      File "/usr/lib64/python2.7/threading.py", line 361, in wait
        _sleep(delay)
    KeyboardInterrupt
    

how can i solve this problem?

Paramiko 1.12.4 on CentOS 7

Thanks.


Answer: **Paramiko** uses **Threading** library to distribute tasks to different
threads, and event is set then they communicate with each other and return
output. The problem here is in **test.py** you are just importing the
test_child not calling any of its function specifically.

So the execution point to call **check_sshd()** is **test_child.py** not
**test.py**. Hence threading event is not set. So for this either you call
function from same file or you need to specifically call function from test.py
rather than just importing file.

**test.py**

    
    
    import test_child
    
    test_child.check_ssh_connection()
    

**test_child.py**

    
    
    import test_grandchild
    def check_ssh_connection():
        test_grandchild.check_sshd()
    

**test_grandchild.py**

    
    
    import paramiko
    
    def check_sshd():
        client = paramiko.SSHClient()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        print('checking ssh connection to local host')
        client.connect('127.0.0.1')
        client.close()
        print('finished') 
    

Hopefully this would solve your problem.

