2012-04-19 16 views
6

Estoy usando fabric para hacer una implementación remota de mi aplicación en un servidor de espacio en bastidor. He probado mis scripts en máquinas virtuales usando el mismo sistema operativo (Ubuntu Server 10.04) en la computadora de mi casa y todos parecen funcionar.No se puede colocar la tela. ¿Se necesita alguna configuración de servidor?

Extrañamente, todos los comandos de fabric put fallan en el servidor real. Todos los otros comandos (run, cd, sudo, etc.) parecen funcionar bien.

Esto sólo ocurre cuando la orientación de este servidor específico, este es el comando ejecuto:

fab test --host remote-server 

remote-server es un alias en mi .ssh/config. Mi fabfile:

@task 
def test(): 
    sudo("echo testing") 
    put("/tmp/file.txt", "/tmp/") 

tmp/test_file.txt es simplemente un archivo de texto que estoy usando para mis pruebas

Ésta es la salida

[remote-server] Executing task 'test' 
[remote-server] sudo: echo testing 
[remote-server] out: testing 

Traceback (most recent call last): 
    File "/home/user/env/lib/python2.6/site-packages/fabric/main.py", line 712, in main 
    *args, **kwargs 
    File "/home/user/env/lib/python2.6/site-packages/fabric/tasks.py", line 298, in execute 
    multiprocessing 
    File "/home/user/env/lib/python2.6/site-packages/fabric/tasks.py", line 197, in _execute 
    return task.run(*args, **kwargs) 
    File "/home/user/env/lib/python2.6/site-packages/fabric/tasks.py", line 112, in run 
    return self.wrapped(*args, **kwargs) 
    File "/home/user/project/fabfile/__init__.py", line 33, in test 
    put("/tmp/file.txt", "/tmp/") 
    File "/home/user/env/lib/python2.6/site-packages/fabric/network.py", line 457, in host_prompting_wrapper 
    return func(*args, **kwargs) 
    File "/home/user/env/lib/python2.6/site-packages/fabric/operations.py", line 338, in put 
    ftp = SFTP(env.host_string) 
    File "/home/user/env/lib/python2.6/site-packages/fabric/sftp.py", line 20, in __init__ 
    self.ftp = connections[host_string].open_sftp() 
    File "/home/user/env/lib/python2.6/site-packages/ssh/client.py", line 399, in open_sftp 
    return self._transport.open_sftp_client() 
    File "/home/user/env/lib/python2.6/site-packages/ssh/transport.py", line 844, in open_sftp_client 
    return SFTPClient.from_transport(self) 
    File "/home/user/env/lib/python2.6/site-packages/ssh/sftp_client.py", line 105, in from_transport 
    chan.invoke_subsystem('sftp') 
    File "/home/user/env/lib/python2.6/site-packages/ssh/channel.py", line 240, in invoke_subsystem 
    self._wait_for_event() 
    File "/home/user/env/lib/python2.6/site-packages/ssh/channel.py", line 1114, in _wait_for_event 
    raise e 
ssh.SSHException: Channel closed. 
Disconnecting from [email protected] done. 

¿Hay algo que necesito configurar en el servidor remoto para ser capaz de enviar archivos usando put?

+1

La tela utiliza SSH. Para 'put', podría usar' scp' o 'sftp'.Intenta usar 'scp' para subir un archivo manualmente primero para asegurarte de que tu entorno funcione bien con eso. – Drake

+0

'scp' funciona,' sftp' no. Buscaré la forma de habilitar 'sftp' en el servidor. ¡Gracias! Este es el resultado que obtengo al intentar enviar sftp al servidor: 'solicitud de subsistema falló en el canal 0 No se pudo leer el paquete: restablecimiento de la conexión por pares' –

+0

@Drake: ¿hay alguna manera de hacer que scp utilice el tejido en vez de sftp? – lpapp

Respuesta

8

Gracias a @Drake descubrí que había un problema con el servidor sftp en la máquina remota.

para la prueba de esto:

$ sftp remote-server 
subsystem request failed on channel 0 
Couldn't read packet: Connection reset by peer 

leí que a fin de permitir sftp que tenía que agregar la línea

Subsystem sftp /usr/lib/openssh/sftp-server 

a /etc/ssh/sshd_config y reinicio (/etc/init.d/ssh restart) el servicio SSH. Pero la línea ya estaba allí y no estaba funcionando.

Entonces, después de leer http://forums.debian.net/viewtopic.php?f=5&t=42818, he cambiado esa línea de

Subsystem sftp internal-sftp 

reiniciado el servicio ssh, y ahora se está trabajando:

$ sftp remote-server 
Connected to remote-server 
sftp> 
+0

Extraño la explicación de su respuesta si está bien cambiar ese archivo todo el tiempo cuando actualiza o instala el paquete en una máquina. Quiero decir, debe haber una razón por la cual esa configuración no es la predeterminada, y eso es lo que creo que es necesario saber para modificar de forma segura la configuración del servidor ... – lpapp

+0

Esto lo hizo por mí. Única solución que resolvió el problema de Channel Closed con Paramiko/Fabric. ¡Gracias! – Bartek

3

tuve misma edición. Encontré que sftp no estaba instalado en mi servidor. Instalé openssh y reinicié el servicio sshd.

yum -y install openssh 
service sshd restart 

Luego también tuve el mismo problema. Revisé el registro del sistema/var/log/messages. He encontrado siguiente error

Jul 3 04:23:20 <ip> sshd[13996]: subsystem request for sftp 
Jul 3 04:23:20 <ip> sshd[13996]: error: subsystem: cannot stat /usr/libexec/sftp- server: No such file or directory 
Jul 3 04:23:20 <ip> sshd[13996]: subsystem request for sftp failed, subsystem not found 

localizar mi ubicación sftp-servidor que estaba en "/ usr/libexec/openssh/sftp-server" y el guión estaba mirando "/ usr/libexec/sftp-server" ubicación Creé un enlace simbólico y mi problema se resolvió.

[email protected]<ip> fabric]# locate sftp-server 
/usr/libexec/openssh/sftp-server 
/usr/share/man/man8/sftp-server.8.gz 

ln -s /usr/libexec/openssh/sftp-server /usr/libexec/sftp-server 
+0

ls -ld/usr/lib/sftp-server lrwxrwxrwx 1 root root 19 oct 25 18:04/usr/lib/sftp-server -> openssh/sftp-server => Esto está en mi Ubuntu 12.04 por defecto, entonces No estoy seguro de si esta respuesta es útil en estos días. ¿Podrías aclararlo por favor? – lpapp

Cuestiones relacionadas