2012-04-19 10 views
6

Sto utilizzando fabric per eseguire una distribuzione remota della mia app su un server rackspace. Ho provato i miei script su macchine virtuali usando lo stesso sistema operativo (Ubuntu Server 10.04) sul mio computer di casa e sembrano funzionare tutti.Impossibile utilizzare fabric put - È necessaria una configurazione del server?

Stranamente, tutti i comandi di fabric put falliscono sul server reale. Tutti gli altri comandi (run, cd, sudo, ecc.) Sembrano funzionare correttamente.

Questo accade solo quando rivolgendosi a questo server specifico, questo è il comando eseguo:

fab test --host remote-server 

remote-server è un alias sul mio .ssh/config. La mia fabfile:

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

tmp/test_file.txt è solo un file di testo che sto utilizzando per i miei test

Questa è l'uscita

[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. 

C'è qualcosa che ho bisogno di configurare sul server remoto per essere in grado di inviare file usando put?

+1

Il tessuto utilizza SSH. Per 'put', potrebbe usare' scp' o 'sftp'.Prova ad usare 'scp' per caricare manualmente un file prima di assicurarti che il tuo ambiente funzioni bene con quello. – Drake

+0

'scp' funziona,' sftp' no. Cercherò un modo per abilitare 'sftp' sul server. Grazie! Questo è l'output che ottengo quando si tenta di sftp al server: 'richiesta di sottosistema non riuscita sul canale 0 Impossibile leggere il pacchetto: connessione ripristinata dal peer' –

+0

@Drake: c'è un modo per rendere fabric use scp piuttosto che sftp? – lpapp

risposta

8

Grazie a @Drake ho scoperto che c'era un problema con il server sftp sul computer remoto.

per verificare questa:

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

ho letto che al fine di consentire sftp avevo bisogno di aggiungere la riga

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

a /etc/ssh/sshd_config e riavvio (/etc/init.d/ssh restart) il servizio SSH. Ma la linea era già lì e non funzionava.

Poi, dopo aver letto http://forums.debian.net/viewtopic.php?f=5&t=42818, ho cambiato linea per

Subsystem sftp internal-sftp 

riavviato il servizio ssh, ed è ora di lavoro:

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

Mi manca la spiegazione dalla tua risposta se è OK cambiare quel file tutto il tempo quando si aggiorna o si installa il pacchetto su una macchina. Voglio dire, ci deve essere una ragione per cui quell'impostazione non è quella predefinita, e penso che sia necessario sapere per modificare in modo sicuro la configurazione del server ... – lpapp

+0

Questo lo ha fatto per me. L'unica soluzione che ha risolto il problema di Channel Closed con Paramiko/Fabric. Grazie! – Bartek

3

ho avuto lo stesso problema. Ho trovato che sftp non è stato installato sul mio server. Ho installato openssh e riavviato il servizio sshd.

yum -y install openssh 
service sshd restart 

Poi ho avuto lo stesso problema. Ho controllato il registro di sistema/var/log/messages. Ho trovato l'errore seguente

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 

individuare il proprio percorso sftp server che era in "/ usr/libexec/openssh/sftp-server" e lo script è stato guardando "/ usr/libexec/sftp-server" posizione Ho creato un link simbolico e il mio problema è stato risolto.

[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 ott 25 18:04/usr/lib/sftp-server -> openssh/sftp-server => Questo è sulla mia Ubuntu 12.04 di default, quindi Non sono sicuro che questa risposta sia utile in questi giorni. Potresti per favore chiarire? – lpapp

Problemi correlati