sftp는“수신 된 메시지가 너무 깁니다”라는 오류를 표시하며 그 이유는 무엇입니까?


26

나는 sftp어제 RHEL 5.4 박스 (RedHat)를 할 수 있었지만 오늘은 할 수 없습니다.

메시지는 "Received message too long 778199411"이며 조사 후 RHEL 상자 .bashrc에 줄이 echo "running .bashrc"있거나 전혀 울리지 않았기 때문 입니다.

그렇다면 왜 선을 인쇄하는 것이 영향을 미칩니 sftp까? 그것은 .bashrc로그인과 같은 다른 상황 에서 작업에서 라인을 인쇄하는 것과 같은 디자인 문제와 같은 느낌이 들었습니다 . 이상한 이유로 실패하면 ssh추적하기가 어렵습니다 sftp.

따라서 문제는 왜 라인을 인쇄하면 그러한 오류가 발생하고 여전히 뭔가를 인쇄하려면 어떻게해야 .bashrc합니까? (주로이 파일이 언제 소싱 / 실행되는지 확인).


답변:


26

이것은 오랜 문제입니다. 나는 10 년 전에 직장에서 상용 SSH와 집에서 공개 SSH를 처음 혼합해야한다는 것을 알았습니다. 나는 오늘 다시 그것을 만났고이 게시물을 찾았습니다.

"sftp / scp는 실패하지만 ssh는 정상입니다"를 검색 한 경우 솔루션을 더 빨리 상기시켜 줄 것입니다!

간단히 말해서, .bashrc 및 .bash_profile 등은 침묵해야하거나 sftp / scp 연결 프로토콜을 방해합니다.

open-SSH FAQ를 참조하십시오.

2.9-연결시 sftp / scp가 실패하지만 ssh는 정상입니다.


자체 업데이트 셸 유틸리티는이 문제의 좋은 원인입니다. 나를 위해 그것은 종종 Jenkins의 deploy-over-ssh를 방해하는 Ruby 버전 관리자였습니다.
— Eric P.

이것에 감사드립니다. 내 bashrc와 bash_profile에있는 디버깅 에코 문을 제거하면이 문제가 해결되었습니다.
— SgtPooki

3
잘못된 .bashrc는 조용해야합니다.
— kubanczyk

2
여기 착륙하는 사람 : serverfault.com/a/630714 에서 제안한 ssh yourhost /usr/bin/true대로 ssh 출력을 조사하는 데 사용할 수 있습니다 . 필자의 경우 ~ / .bashrc에서 일부 명령이 오류를 생성하기 시작했습니다.
— 유발 아츠 몬

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-sftpSFTP 지원을 제공하는 더 좋은 방법은 IMO입니다. 이 관련 게시물을 볼 수 있습니다 : serverfault.com/questions/660160/…
— Kenneth

sshd_config 변경 제안 후 sshd 및 sftp를 종료했습니다 (악마가 있는지 확실하지 않음). 처음에받은 메시지가 너무 깁니다 오류가 발생했지만 어쨌든 로그인되었습니다. 그런 다음 같은 문제로 돌아 가기
— clearlight

2

이 모든 곳에서 본 모든 응답은 /etc/motd, 또는 .bashrc등을 통해 너무 많은 인쇄 출력을 주장 합니다. 항상 사실은 아닙니다. 당신은 어떤을 가진 계정이있는 경우 .bashrc는이 /etc/motd비어 있으며 기본값은 .bashrc입니다 최소 여전히 문제가있을 수있는 인쇄 출력. 당신의 쉘이있는 사용자 계정이있는 경우 /sbin/nologin또는 /bin/false이 오류가 계속 발생합니다.

왜 이렇게 하시겠습니까 ??? 누군가에게 root-jailed 권한을 부여하려고한다면 sftp, 안전한 쉘 액세스 권한이 없으면 이런 일이 발생합니다.

해결 방법 : ssh루트 감옥에 넣어 두십시오. 이 문제는에서 해결해야 할 문제입니다 ssh. 너무 오래 걸립니다.


내 .bashrc에서 너무 긴 사용자 정의 출력으로 인해이 문제가 발생했습니다 (screenfetch가 있습니다). 그러나 나는 아직도 이것을 무시하는 방법을 알아 내려고 노력하고 있습니다
— vladkras

그렇습니다. ssh를 수정해야합니다. 우리의 경우에는 쉘에 문제가있었습니다. 우리는 실제로 루트 jail을 위해 특별히 sftp 클라이언트를 사용했기 때문에 모든 루트 jail을 할 필요는 없었습니다.
— TekOps

요점은 .bashrc를 수정하고 싶지 않다는 것입니다. 첫 번째 메시지 길이로 서버에 연결하고 싶습니다. 그래서 아마 내 IDE의 설정을 수정해야합니다
— vladkras

2

해당 ID가 bash를 사용하는 경우 원격 시스템의 id 사용자 이름에서 ~ / .bashrc 상단에 다음을 입력하십시오.

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

단순히 전체 파일을 소싱하는 대신 ~ / .bashrc에서 일찍 종료됩니다 ...이 ID로 로그인하지 않고 해당 사용자 이름으로 원격 ID로 scp 또는 sftp를 실행할 때 .bashrc를 자동으로 만드는 문제를 해결합니다 ... 다른 답변에서 @Peter Scott을 인용하려면 : "단순히, .bashrc 및 .bash_profile 등은 침묵해야하거나 sftp / scp 연결 프로토콜을 방해합니다."

또는 원격 ID가 zsh를 사용하는 경우 ~ / .zshrc의 맨 위에 다음을 입력하십시오.

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

원격 시스템의 쉘이 ~ / .bashrc를 사용하지 않는 경우 ~ / .bashrc_profile 또는 ~ / .profile 파일에서 위의 편집을 수행하여 해당 원격 상자의 쉘에 적합하십시오.


1

한 가지 더 이유가있을 수 있습니다. openssh-5.3p1-122.el6.x86_64가있는 RHEL 6에서 LOCALE이 "C"로 유지 될 때 잘못된 동작을 발견했습니다. 다음과 같이 변경 한 경우 :

export LC_ALL="en_US.UTF-8"

그런 다음 sftp가 올바르게 작동합니다. 이전 openssh-5.3p1-118에서는 이러한 동작이 발생하지 않았으므로이 빌드에서 약간의 버그 일 수 있습니다.


1
이 겉보기 이상한 제안은 내 상황에 효과적이었습니다. 감사!
— jwd630

0

제 경우에는 작동시키기 위해 우분투의 환영 메시지를 비활성화해야했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.