sftp hata veriyor: “İleti çok uzun sürdü” ve nedeni nedir?


26

Ben bunu başardı sftpbir RHEL 5.4 kutu (RedHat) ve yapamam bugüne dün.

Mesaj "Received message too long 778199411", ve bazı araştırmalardan sonra, RHEL kutumun .bashrcbir çizgiye sahip olmasından kaynaklanıyordu echo "running .bashrc"- ya da herhangi bir şeyden yankılanıyorlardı galiba.

Öyleyse neden bir satır yazdırmayı etkiler sftp? .bashrcGiriş yapma gibi diğer durumlarda çalışmalarda bir satır basmak gibi bir tasarım sorunu gibi hissettim sshve sftpböyle garip bir nedenden dolayı başarısız olduğunda izini sürmek biraz zor .

Öyleyse soru şu ki, neden bir satır yazdırmak böyle bir hataya neden oluyor .bashrc? (çoğunlukla bu dosyanın ne zaman kaynaklandığını / çalıştırıldığını görmek için).


Yanıtlar:


26

Bu uzun zamandır devam eden bir sorundur. On yıl önce işyerinde ticari SSH'yi ve evde açık SSH'yi karıştırmak zorunda kaldığımda buldum. Bugün tekrar karşılaştım ve bu yazıyı buldum.

"Sftp / scp başarısız olur, ancak ssh tamam" ifadesini aramış olsaydım, çözüme hatırlatırdım!

Basitçe söylemek gerekirse, .bashrc ve .bash_profile etc sessiz olmalıdır ya da sftp / scp bağlantı protokolüne müdahale etmelidirler.

Open-SSH SSS bölümüne bakın:

2.9 - sftp / scp bağlantıda başarısız oluyor, ancak ssh tamam.


Kendiliğinden güncellenen kabuk yardımcı programları bu sorun için iyi bir suçludur. Benim için sık sık Jenkins'in sloy konuşlandırmasını engelleyen Ruby Version yöneticisi oldu.
Eric P.

Bunun için, benim bashrc ve bash_profile dosyalarımdaki bazı hata ayıklama yankı ifadelerini kaldırmak benim için bunu çözdü.
SgtPooki

3
Yanlış .bashrc sessiz olmalıdır, .bash_profile problemsiz yankılanabilir.
kubanczyk

2
Buraya inen herkes için: serverfault.com/a/630714 adresinde önerildiği gibi, ssh'ınızınssh yourhost /usr/bin/true çıktısını ölçmek için kullanabilirsiniz. Benim durumumda ~ / .bashrc dosyasında bazı komutlar hata yapmaya başladı.
Yuval Atzmon

16

En azından SFTP için bu, internal-sftpokumadığı .bashrcya da olmadığı gibi alt sistem kullanılarak düzeltilebilir /etc/motd.

Basitçe değiştirmek /etc/ssh/sshd_configdosya ve SFTP alt sistemini değiştirin:

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

Ve hata gitti.


Bunu sevdim .. sadece bunun güvenlik çıkarımı olup olmadığını merak ediyorum?
RoyM

internal-sftpIMO, SFTP desteği sunmanın daha iyi bir yoludur. Bu ilgili yazıyı
Kenneth

Sshd_config'iniz önerinizi değiştirdikten sonra, sshd ve sftp'yi öldürdüm (şeytan olup olmadığından emin değilim). İlk kez Alınan Mesaj çok uzun bir hata aldı ancak yine de giriş yaptı. Ardından aynı probleme geri dönün
açık

2

Bu konuda herhangi bir yerde gördüğüm her yanıt, bunun /etc/motd, veya .bashrc, vb. Üzerinden çok fazla basılı çıktı olduğunu iddia ediyor . Her zaman doğru değil. Hiçbir sahip bir hesap varsa .bashrc, /etc/motdboş ve varsayılan .bashrcolan asgari SİZ HALA sorun CAN hiçbir basılı çıkışı ile. Eğer bir kabuğuna sahip bir kullanıcı hesabınız varsa /sbin/nologinya da /bin/falsebu hata devam edecektir.

Neden bunu yaptın??? Kökten hapse atılan birine yardım etmeye çalışıyorsanız sftp, güvenli bir kabuk erişimi olmadan bu gerçekleşecek.

Çevrenizdekiler: izin verin sshve onları bir kök hapishaneye koyun. Bu, ele alınması gereken bir sorun, sshgelmesi çok uzun.


Bu problemim tam olarak .bashrc'deki çok uzun bir özel çıktı nedeniyle gerçekleşti (orada screenfetch var). Ama hala bunu nasıl görmezden
geleceğimi

Evet, durum böyle olabilir. Ssh'yi değiştirmek zorundasınız. Bizim durumumuzda bu kabuk ile bir problemdi. Aslında root-hapishanesi için sftp istemcisi kullandık, bu yüzden tüm root-hapis işleri yapmak zorunda kalmadı.
TekOps

Mesele şu ki .bashrc'imi değiştirmek istemiyorum. Sunucuya herhangi bir ilk mesaj uzunluğuyla bağlanmak istiyorum. Bu yüzden muhtemelen benim IDE ayarlarımı değiştirmek zorundayım
vladkras

2

Eğer bu id bash kullanıyorsa, uzak makinedeki id kullanıcı adına ~ / .bashrc komutunu yazmanız yeterlidir.

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

bu sadece tam dosya kaynaklamak yerine ~ / .bashrc öğesinden erken çıkar ... bu kimliğe giriş yapmadığınızda ve scp'nizi veya sftp'nizi uzak kimliği olarak çalıştırdığınızda ... Peter Scott'un diğer cevabında alıntı yapmak: "Basitçe söylemek gerekirse, .bashrc ve .bash_profile etc sessiz olmalı ya da sftp / scp bağlantı protokolünü engellemelidir."

Alternatif olarak, eğer bu uzak kimliği zsh kullanıyorsa, ~ / .zshrc dosyasının üst kısmına aşağıdaki komutu koyun.

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

Uzak makinenizdeki kabuk ~ / .bashrc kullanmıyorsa, yukarıdaki düzenlemeyi ~ / .bashrc_profile veya ~ / .profile dosyasında veya bu uzak kutudaki kabuğunuza uyacak şekilde yapın.


1

Bir sebep daha olabilir. Openssh-5.3p1-122.el6.x86_64 ile RHEL 6'da LOCALE "C" konumunda kaldığında yanlış davrandığını tespit ettik. İle değiştirildiği zaman:

export LC_ALL="en_US.UTF-8"

Sonra sftp düzgün davranır. Önceki openssh-5.3p1-118'de böyle bir davranış yaşamamıştık, bu yüzden muhtemelen bu yapıdaki küçük hatalardan biri.


1
Bu görünüşte tuhaf bir öneri durumum için işe yarayan şeydi. Teşekkürler!
jwd630

0

Benim durumumda çalışabilmesi için Ubuntu'nun hoş geldin mesajını devre dışı bırakmam gerekiyordu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.