sftp ให้ข้อผิดพลาด:“ ข้อความที่ได้รับมานานเกินไป” และอะไรคือสาเหตุ?


26

ฉันสามารถทำsftpเมื่อวานนี้กับกล่อง RHEL 5.4 (RedHat) และวันนี้ฉันทำไม่ได้

ข้อความเป็น"Received message too long 778199411"และหลังจากการตรวจสอบบางอย่างมันเป็นเพราะกล่อง RHEL ของฉัน.bashrcมีสายecho "running .bashrc"- หรือสะท้อนอะไรเลยฉันคิดว่า

ดังนั้นทำไมจะพิมพ์ออกบรรทัดส่งผลกระทบต่อsftp? มันให้ความรู้สึกเหมือนเป็นปัญหาการออกแบบเมื่อพิมพ์.bashrcงานในสถานการณ์อื่น ๆ เช่นการล็อกอินหรือsshมันยากที่จะติดตามเมื่อsftpล้มเหลวด้วยเหตุผลแปลก ๆ

ดังนั้นคำถามคือทำไมการพิมพ์ออกบรรทัดสาเหตุข้อผิดพลาดดังกล่าวและสิ่งที่ถ้าเรายังคงชอบที่จะพิมพ์ออกในบางสิ่งบางอย่าง.bashrc? (ส่วนใหญ่จะเห็นเมื่อไฟล์นี้ได้รับมา / ดำเนินการ)


คำตอบ:


26

ปัญหานี้เป็นปัญหาที่ยาวนาน ฉันพบว่าเมื่อสิบปีก่อนเมื่อฉันต้องผสม SSH เชิงพาณิชย์ในที่ทำงานและเปิด SSH ที่บ้าน ฉันพบมันอีกครั้งในวันนี้และพบโพสต์นี้

ถ้าฉันค้นหา "sftp / scp ล้มเหลว แต่ ssh ก็โอเค" ฉันจะได้รับการเตือนเกี่ยวกับวิธีแก้ปัญหาในไม่ช้า!

กล่าวง่ายๆคือ. bashrc และ. bash_profile ฯลฯ จะต้องเงียบหรือรบกวนการเชื่อมต่อโปรโตคอล sftp / scp

ดูคำถามที่พบบ่อยเกี่ยวกับ open-SSH:

2.9 - sftp / scp ไม่สามารถเชื่อมต่อได้ แต่ ssh ก็โอเค


การอัพเดตอรรถประโยชน์ของเชลล์ด้วยตนเองเป็นสาเหตุของปัญหาที่ดี สำหรับฉันมันมักจะเป็นผู้จัดการเวอร์ชันทับทิมรบกวน Jenkins 'deploy-over-ssh
Eric P.

ขอบคุณสำหรับสิ่งนี้การลบข้อความสั่งการแก้ไขข้อผิดพลาดบางอย่างที่ฉันมีใน bashrc และ bash_profile ของฉันแก้ไขสิ่งนี้ให้ฉัน
SgtPooki

3
ผิด. bashrc ต้องเงียบ, .bash_profile สามารถสะท้อนได้โดยไม่มีปัญหา
kubanczyk

2
สำหรับผู้ที่ลงจอดที่นี่: ตามที่แนะนำในserverfault.com/a/630714คุณสามารถใช้ssh yourhost /usr/bin/trueเพื่อตรวจสอบผลลัพธ์ของ ssh ของคุณ ในกรณีของฉันฉันพบบางคำสั่งใน ~ / .bashrc เริ่มก่อให้เกิดข้อผิดพลาด
Yuval Atzmon

16

อย่างน้อยสำหรับ SFTP นี้สามารถแก้ไขได้โดยการใช้internal-sftpระบบย่อยเป็นที่ไม่ได้อ่านหรือ.bashrc/etc/motd

เพียงเปลี่ยน/etc/ssh/sshd_configไฟล์และเปลี่ยนระบบย่อย SFTP:

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

และข้อผิดพลาดก็หายไป


ฉันชอบอันนี้ .. แค่สงสัยว่ามันมีผลกระทบด้านความปลอดภัยหรือไม่?
RoyM

internal-sftpคือ IMO วิธีที่ดีกว่าในการให้การสนับสนุน SFTP คุณสามารถดูโพสต์ที่เกี่ยวข้องนี้: serverfault.com/questions/660160/ …
Kenneth

หลังจากคำแนะนำการเปลี่ยนแปลง sshd_config ของคุณฉันฆ่า sshd และ sftp (ไม่แน่ใจว่ามีปีศาจ) ครั้งแรกที่ได้รับข้อความที่ได้รับมีข้อผิดพลาดยาวเกินไป แต่ถูกล็อกอินอยู่ จากนั้นกลับไปที่ปัญหาเดียวกัน
clearlight

2

ทุกการตอบสนองที่ฉันเห็นที่ใดก็ได้ในเรื่องนี้ทั้งหมดอ้างว่ามันเป็นงานพิมพ์ที่มากเกินไปผ่านทาง/etc/motdหรือ.bashrcอื่น ๆ ไม่จริงเสมอไป หากคุณมีบัญชีที่ไม่มีหมายเลข.bashrcนั้น/etc/motdจะว่างเปล่าและค่าเริ่มต้น.bashrcจะน้อยที่สุดโดยไม่มีผลงานพิมพ์ที่คุณสามารถมีปัญหาได้ หากคุณมีบัญชีผู้ใช้ที่มีเปลือก/sbin/nologinหรือ/bin/falseข้อผิดพลาดนี้จะยังคงเกิดขึ้น

ทำไมคุณถึงทำเช่นนี้ ??? หากคุณพยายามให้ใครบางคนติดคุกsftpโดยที่ไม่มีการเข้าถึงเชลล์อย่างปลอดภัยจะเกิดขึ้น

หลีกเลี่ยง: อนุญาตsshและนำพวกเขาเข้าไปในคุกรูทเช่นกัน ปัญหานี้เป็นปัญหาที่ต้องกล่าวถึงsshในการมานานเกินไป


ฉันมีปัญหานี้อย่างแน่นอนเนื่องจากเอาต์พุตที่กำหนดเองยาวเกินไปใน. bashrc ของฉัน (ฉันมีหน้าจอเรียกข้อมูล) แต่ฉันยังคงพยายามหาวิธีทำให้ไม่สนใจสิ่งนี้
vladkras

ใช่ว่าอาจเป็นกรณี คุณต้องแก้ไข ssh ในกรณีของเรามันเป็นปัญหากับเชลล์ เราใช้ไคลเอนต์ SFTP โดยเฉพาะสำหรับรูทคุกดังนั้นจึงไม่จำเป็นต้องทำสิ่งที่รูททั้งหมด
TekOps

ประเด็นคือฉันไม่ต้องการแก้ไข. bashrc ของฉัน ฉันต้องการเชื่อมต่อกับเซิร์ฟเวอร์ด้วยความยาวของข้อความแรก ดังนั้นฉันจึงต้องแก้ไขการตั้งค่า IDE ของฉันอาจจะ
vladkras

2

เพียงแค่ใส่ต่อไปนี้เข้าไปด้านบนของ ~ / .bashrc ในชื่อผู้ใช้ของรหัสบนเครื่องระยะไกลถ้ารหัสนั้นใช้ทุบตี

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

ซึ่งเพิ่งออกจากต้น ~ / .bashrc แทนการจัดหาไฟล์ทั้งหมด ... วิธีนี้จะทำให้. bashrc เงียบเมื่อคุณไม่ได้ลงชื่อเข้าใช้ id นั้นและเพิ่งรัน scp หรือ sftp ด้วยชื่อผู้ใช้นั้นเป็นรหัสระยะไกล ... เพื่ออ้างถึง @ Peter Scott ในคำตอบอื่น ๆ : "พูดง่าย ๆ , .bashrc และ. bash_profile ฯลฯ ต้องเงียบหรือไม่ก็รบกวนการเชื่อมต่อโปรโตคอล sftp / scp"

หรือถ้ารหัสระยะไกลนั้นใช้ zsh ให้ใส่ที่ด้านบนของ ~ / .zshrc

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

หากเชลล์บนเครื่องรีโมตของคุณไม่ใช้ ~ / .bashrc ให้ทำการแก้ไขข้างต้นในไฟล์ ~ / .bashrc_profile หรือ ~ / .profile หรือคล้ายกับเชลล์ของคุณในกล่องรีโมตนั้น


1

อาจมีอีกเหตุผลหนึ่ง ใน RHEL 6 ที่มี openssh-5.3p1-122.el6.x86_64 เราได้พบว่ามันทำงานผิดปกติเมื่อ LOCALE ยังคงอยู่ที่ "C" เมื่อเปลี่ยนด้วย:

export LC_ALL="en_US.UTF-8"

จากนั้น SFTP ทำงานได้อย่างถูกต้อง ใน openssh-5.3p1-118 ก่อนหน้านี้เราไม่ได้พบกับพฤติกรรมดังกล่าวดังนั้นจึงอาจมีข้อบกพร่องเล็กน้อยในโครงสร้างนี้


1
คำแนะนำแปลก ๆ ที่ดูเหมือนจะเป็นสิ่งที่ใช้ได้กับสถานการณ์ของฉัน ขอบคุณ!
jwd630

0

ในกรณีของฉันเพื่อให้มันทำงานได้ฉันต้องปิดข้อความต้อนรับของ Ubuntu

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.