pre-release updates, bug fixes
diff --git a/utils.py b/utils.py
index 2e26207..11b38ae 100644
--- a/utils.py
+++ b/utils.py
@@ -64,7 +64,7 @@
         raise
 
 
-def run_over_ssh(conn, cmd, stdin_data=None, exec_timeout=60):
+def run_over_ssh(conn, cmd, stdin_data=None, exec_timeout=5 * 60 * 60):
     "should be replaces by normal implementation, with select"
     transport = conn.get_transport()
     session = transport.open_session()
@@ -89,13 +89,19 @@
                     break
             except socket.timeout:
                 pass
+
             if time.time() - stime > exec_timeout:
-                return 1, output + "\nExecution timeout"
+                raise OSError(output + "\nExecution timeout")
+
         code = session.recv_exit_status()
     finally:
         session.close()
 
-    return code, output
+    if code != 0:
+        templ = "Cmd {0!r} failed with code {1}. Output: {2}"
+        raise OSError(templ.format(cmd, code, output))
+
+    return output
 
 
 SMAP = dict(k=1024, m=1024 ** 2, g=1024 ** 3, t=1024 ** 4)