]> thyrsus.com Git - ssh-installkeys.git/commitdiff
Handle some error conditions more gracefilly.
authorEric S. Raymond <esr@thyrsus.com>
Wed, 13 Oct 2010 09:52:09 +0000 (05:52 -0400)
committerEric S. Raymond <esr@thyrsus.com>
Wed, 13 Oct 2010 09:52:09 +0000 (05:52 -0400)
Patch thanks to Dhirendra Singh Kholia <dkholia@cs.ubc.ca>

ssh-installkeys

index 03ef114025fab65149cf66d4a2b6f8d93fa4865f..f809fb9aea8502c1de8a84fe58a01d38c9959e86 100755 (executable)
@@ -580,7 +580,7 @@ class ssh_session:
         if self.verbose:
             sys.stderr.write("-> " + command + "\n")
         while True:
-            seen=child.expect([EOF,'assword:','continue connecting (yes/no)?'])
+            seen=child.expect([EOF,'assword:','continue connecting (yes/no)?','Permission denied','refused','not resolve'])
             if self.verbose:
                 sys.stderr.write("<- " + child.before + "\n")
             if seen == 0:
@@ -595,6 +595,16 @@ class ssh_session:
                 if self.verbose:
                     sys.stderr.write("Saw 'continue connecting' prompt...\n")
                 child.sendline("yes")
+            elif seen == 3:
+                sys.stderr.write("FAILURE: check your password\n")
+                raise RuntimeError
+            elif seen == 4:
+                sys.stderr.write("FAILURE: cannot connect to port " + self.port + "\n")
+                raise RuntimeError
+            elif seen == 5:
+                sys.stderr.write("FAILURE: check hostname\n")
+                raise RuntimeError
+ 
         return child.before
     def ssh(self, command):
         return self.__exec("ssh -p %s -l %s %s \"%s\""%(session.port, self.user,self.host,command))
@@ -749,6 +759,8 @@ if __name__ == '__main__':
              session.scp(keyfile, "~/.ssh/authorized_keys")
     except SystemExit:
         pass
+    except RuntimeError:
+        sys.exit(-1)
     # It's all over now...
     os.remove(keyfile)
     if check: