sftp dà un errore: "Messaggio ricevuto troppo a lungo" e qual è il motivo?


26

Sono stato in grado di fare sftpieri con una scatola RHEL 5.4 (RedHat) e oggi non posso.

Il messaggio è "Received message too long 778199411", e dopo alcune indagini, era dovuto al fatto che il mio box RHEL .bashrcaveva una linea echo "running .bashrc"- o echeggiava qualcosa, credo.

Quindi, perché la stampa di una linea dovrebbe influire sftp? Sembrava un problema di progettazione come stampare una linea in .bashrclavori in altre situazioni come il login o sshed è un po 'difficile rintracciare quando sftpfallisce per una ragione così strana.

Quindi la domanda è: perché stampare una riga causa tale errore e cosa succede se ci piace ancora stampare qualcosa .bashrc? (principalmente per vedere quando questo file viene fornito / eseguito).


Risposte:


26

Questo è un problema di vecchia data. L'ho trovato dieci anni fa quando per la prima volta ho dovuto mescolare SSH commerciale al lavoro e SSH a casa. L'ho incontrato di nuovo oggi e ho trovato questo post.

Se avessi cercato "sftp / scp fallisce ma ssh è OK" mi sarei ricordato prima della soluzione!

In parole povere, .bashrc e .bash_profile ecc. Devono essere silenziosi o interferiscono con il protocollo di connessione sftp / scp.

Vedi le domande frequenti su open-SSH:

2.9 - sftp / scp non riesce alla connessione, ma ssh è OK.


Le utilità di shell autoaggiornamento sono un buon colpevole di questo problema. Per me è stato spesso il gestore della versione di Ruby a interferire con il deploy-over-ssh di Jenkins.
Eric P.

Grazie per questo, la rimozione di alcune dichiarazioni echo di debug che avevo nel mio bashrc e bash_profile mi ha risolto questo problema.
SgtPooki,

3
.Bashrc errato deve essere silenzioso, .bash_profile può echeggiare senza problemi.
Kubanczyk,

2
Per chiunque atterra qui: come suggerito in serverfault.com/a/630714 , puoi usare ssh yourhost /usr/bin/trueper sondare l'output del tuo ssh. Nel mio caso, ho trovato alcuni comandi in ~ / .bashrc che hanno iniziato a produrre errori.
Yuval Atzmon,

16

Almeno per SFTP questo può essere risolto usando il internal-sftpsottosistema, in quanto ciò non legge .bashrco /etc/motd.

Basta cambiare il /etc/ssh/sshd_configfile e cambiare il sottosistema SFTP:

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

E l'errore è sparito.


Mi piace questo ... mi chiedo solo se questo ha delle implicazioni sulla sicurezza?
RoyM,

internal-sftpè, IMO, un modo migliore per offrire supporto SFTP. Puoi vedere questo post correlato: serverfault.com/questions/660160/…
Kenneth

Dopo il tuo suggerimento di modifica sshd_config, ho ucciso sshd e sftp (non sono sicuro che ci fosse un demone). La prima volta ha ricevuto l'errore Messaggio troppo lungo ma è stato comunque effettuato l'accesso. Quindi torniamo allo stesso problema
chiarisci il

2

Ogni risposta che ho visto da nessuna parte su tutto ciò sostiene che si tratta di un output stampato eccessivo tramite /etc/motd, o .bashrc, ecc. Non sempre vero. Se si dispone di un account che non ha .bashrc, /etc/motdè vuoto e il valore predefinito .bashrcè minimo senza output stampato È POSSIBILE ANCORA avere il problema. Se si dispone di un account utente con una shell /sbin/nologino /bin/falsequesto errore si verificherà comunque.

Perché dovresti farlo ??? Se stavi tentando di concedere a qualcuno il root-jailing sftp, senza accesso sicuro alla shell questo accadrà.

Aggira: consenti sshe inseriscili anche in una prigione root. Questo è un problema che deve essere affrontato ssh, è troppo lungo per venire.


Ho avuto questo problema esattamente a causa dell'output personalizzato troppo lungo nel mio .bashrc (ho screenfetch lì). Ma sto ancora cercando di capire come farlo ignorare questo
vladkras l'

Sì, potrebbe essere così. Devi modificare ssh. Nel nostro caso è stato un problema con la shell. In realtà abbiamo usato un client sftp appositamente per il root-jail, quindi non abbiamo dovuto fare tutte le cose del root-jail.
TekOps,

Il punto è che non voglio modificare il mio .bashrc. Voglio connettermi al server con qualsiasi lunghezza del primo messaggio. Quindi probabilmente devo modificare le impostazioni del mio IDE
vladkras il

2

inserisci semplicemente in cima a ~ / .bashrc il nome utente dell'id sul computer remoto se quell'id usa bash

# If not running interactively, don't do anything and return early
[[ $- == *i* ]] || return  

che semplicemente esce presto da ~ / .bashrc invece di reperire l'intero file ... questo risolve rendere silenzioso .bashrc quando non si accede a quell'id e si esegue semplicemente scp o sftp con quel nome utente come id remoto ... per citare @Peter Scott in un'altra risposta: "In parole povere, .bashrc, .bash_profile ecc. devono essere silenziosi o interferiscono con il protocollo di connessione sftp / scp".

In alternativa, se quell'ID remoto utilizza zsh, inserisci quanto segue in cima al suo ~ / .zshrc

# If not running interactively, don't do anything and return early
[[ -o interactive ]] || exit 0

Se la shell sul tuo computer remoto non usa ~ / .bashrc, esegui le modifiche sopra nel file ~ / .bashrc_profile o ~ / .profile o simili per adattarle alla shell su quel box remoto


1

Può esserci un motivo in più. Su RHEL 6 con openssh-5.3p1-122.el6.x86_64 abbiamo riscontrato che si comporta in modo errato quando LOCALE rimane su "C". Se modificato con:

export LC_ALL="en_US.UTF-8"

Quindi sftp si comporta correttamente. Nel precedente openssh-5.3p1-118 non abbiamo riscontrato un simile comportamento, quindi è probabilmente un bug minore in questa build.


1
Questo suggerimento apparentemente strano era ciò che ha funzionato per la mia situazione. Grazie!
jwd630,

0

Nel mio caso, per farlo funzionare, avevo bisogno di disabilitare il messaggio di benvenuto di Ubuntu.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.