어제는 sftp
RHEL 5.4 상자(RedHat)에서 이 작업을 수행할 수 있었지만 오늘은 할 수 없습니다.
메시지는 "Received message too long 778199411"
다음과 같습니다. 조사한 결과 내 RHEL 상자 .bashrc
에 줄이 있거나 echo "running .bashrc"
에코가 있기 때문이라고 생각합니다.
그렇다면 라인을 인쇄하는 것이 왜 차이를 만드는가 sftp
? 이는 디자인 문제처럼 느껴집니다. .bashrc
다른 경우(예: 로그인 또는) 한 줄이 인쇄되고 이상한 이유로 실패할 때 추적하기가 어렵기 때문입니다 ssh
.sftp
그렇다면 문제는 왜 한 줄을 인쇄하면 그러한 오류가 발생하는지, 우리가 여전히 무언가를 인쇄하고 싶다면 어떻게 하느냐는 것입니다 .bashrc
. (주로 파일을 가져오거나 실행하는 시기를 확인하기 위해)
답변1
이것은 오랜 문제입니다. 나는 10년 전 처음으로 직장에서 상업용 SSH를 혼합하고 집에서 SSH를 열어야 했을 때 이 사실을 발견했습니다. 오늘 또 이 문제가 발생하여 이 게시물을 발견했습니다.
"sftp/scp는 실패하지만 ssh는 작동합니다"를 검색하면 솔루션에 대한 알림을 더 빨리 받게 됩니다!
즉, .bashrc
, .bash_profile
, .cshrc
등 .profile
은 비대화형 세션에 대해 침묵을 유지해야 합니다. 그렇지 않으면 sftp/scp 연결 프로토콜을 방해하게 됩니다.
이 출력은 sftp/scp 클라이언트를 혼란스럽게 합니다. 다음을 실행하여 쉘이 이 작업을 수행하는지 확인할 수 있습니다.SSH당신의 호스트/usr/bin/true위 명령으로 출력이 생성되면 셸 초기화를 수정해야 합니다.
개방형 SSH FAQ에서: 2.9 - sftp/scp 연결이 실패했지만 ssh는 제대로 작동합니다.
답변2
적어도 SFTP의 경우 이는 internal-sftp
하위 시스템을 사용하여 해결할 수 있습니다. 왜냐하면 하위 시스템이 .bashrc
또는 /etc/motd
.
/etc/ssh/sshd_config
파일을 변경 하고 SFTP 하위 시스템을 변경하면 됩니다.
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
오류가 사라졌습니다.
답변3
ID가 bash를 사용하는 경우 원격 시스템의 ID 사용자 이름에 대해 ~/.bashrc 상단에 다음을 입력하세요.
# If not running interactively, don't do anything and return early
[[ $- == *i* ]] || return
전체 파일을 가져오는 대신 ~/.bashrc에서 일찍 종료됩니다. 이는 해당 ID로 로그인하지 않고 해당 사용자 이름을 원격으로 사용하여 scp 또는 sftp를 실행할 때 .bashrc를 자동으로 만드는 문제를 해결합니다. id... 다른 답변에서 @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 파일에서 위의 편집을 수행하거나 원격 시스템의 셸에 맞게 유사하게 만듭니다.
....고쳐 쓰다...위의 조각을 원격 호스트의 사용자 파일 ~/.bashrc 상단에 배치하면 모든 ssh 연결은 이 코드 조각을 볼 때까지 ~/.bashrc를 간단히 읽을 ~/.bashrc 파일을 소스로 사용하게 됩니다. ~/.bashrc 파일의 나머지 부분 가져오기를 중지하여 ssh 연결에 필요하지 않고 원하는 항목으로 원격 시스템의 셸을 오염시키는 것을 방지합니다. 가져와야 하는 파일에 코드 조각을 넣지 마세요. 또는 완료하기 위해 실행됩니다. 이 코드 조각의 요점은 소스 파일 ~/.bashrc의 초기 종료이기 때문입니다(소스 파일과 실행 파일 간에 차이가 있음에 유의)... ~/.bashrc 파일은 항상 소스입니다. 파일, 실행되지 않음
답변4
또 다른 이유가 있을 수 있습니다. openssh-5.3p1-122.el6.x86_64가 포함된 RHEL 6에서 LOCALE이 "C"로 유지되면 잘못 동작하는 것으로 나타났습니다. 다음으로 변경된 경우:
export LC_ALL="en_US.UTF-8"
그러면 sftp가 올바르게 작동합니다. 이전 openssh-5.3p1-118에서는 이러한 동작이 발생하지 않았으므로 이 버전에서는 사소한 버그일 수 있습니다.