Python - Problemas de servidor y cliente

Estoy tratando de crear un servidor básico y un script de cliente. La idea es que el cliente pueda conectarse al servidor y ejecutar comandos. Un poco como SSH pero muy simple. Aquí está mi código de servidor:

import sys, os, socket


host = ''                
port = 50103
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
print("Server started on port: ", port)
s.listen(1)
while (1):
    conn, addr = s.accept()
    print 'New connection from ', addr
    try:
        while True:
            rc = conn.recv(2)
            pipe = os.popen(rc)
            rl = pipe.readlines()
            fl = conn.makefile('w', 0)
            fl.writelines(rl[:-1])
            fl.close()
    except IOError:
            conn.close()

Y aquí está mi cliente:

import sys, socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = 'localhost'
port = input('Port: ')
s.connect((host, port))
while (1):
    cmd = raw_input('$ ')
    s.send(cmd) 
    file = s.makefile('r', 0)
    sys.stdout.writelines(file.readlines())
    file.close()

Aquí está mi problema. Inicio el servidor y luego ejecuto el cliente en la misma máquina. Entro al puerto y me conecto. Luego obtengo el raw_input que es el '$2$#39;. Si escribo un comando como 'ls', simplemente se cuelga del lado del cliente. Tengo que salir del servidor para que el cliente reciba la salida de ls. Por cierto, estoy ejecutando Ubuntu Linux. No estoy seguro si eso importa.

Respuestas a la pregunta(2)

Su respuesta a la pregunta