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.