내가 언제 ssh
내 서버 중 하나에, 그것은 로그인 보인다, 그러나 정지 나에게 메시지를주기 전에 ( message debug2: shell request accepted on channel 0 is the last log entry
).
이상한 것은 그렇지 않은 ssh -t "/bin/bash"
경우 작동합니다 ssh
.
내가 지금까지 알아 낸 것
- 같은 지리적 위치에있는 서버에서 정상적으로 로그인 할 수 있습니다
- I 인 경우
ssh -t '/bin/bash'
-모든 위치에서 완벽하게 로그인 할 수 있습니다. - 서버를 사용
rsync
하면 작동하는 것 같습니다. - 서버
rsync
에서 사용하면 문제없이 작동합니다.
내가 시도한 것
- 제거하거나 모든 로그인 옵션을 변경
.profile
,.bashrc /etc/profile
- 제대로 작동하는 동일한 서버에서
ssh_config
및 / 또는sshd_config
다른 서버로 변경 - 라우팅을 확인했습니다
- 네트워크 전문가
tcpdump
가 아무 소용이 없는지 조사 했습니다 (재전송이 많지만)
나는 정말로 다른 것을 생각할 수 없다
닷지 네트워크 카드 드라이버 / 펌웨어 외에.
답변
프로필에 문제가있을 수 있습니다.
당신이 연결할 때 ssh -t /bin/bash
쉘하지 않습니다 ‘로그인’, 그것은 소스하지 /etc/profile
않으며 ~/.profile
및 ~/.bashrc
…
따라서 연결 후 셸을 디버그 모드로 설정하고 각 파일을 소싱하여 내부에서 차단되는 내용을 찾으십시오.
set -x
. /etc/profile
...and so on
편집하다
내가 틀렸다는 점에 유의하십시오 .bashrc 파일은 대화 형 쉘에서 소스로 제공됩니다 (따라서 profile.d 파일 만 중요합니다).
연결 프로세스의 여러 단계 목록을 작성하십시오. 이 같은
1) SSH 연결 (config, …)
2) 로그인 (PAM, tty, wtmp 등 …)
3) 셸 시작 (프로필, 홈 디렉토리 액세스, …)
(1)을 확인하려면 디버그 모드에서 sshd 데몬을 시작할 수 있습니다. 이를 위해 전용 포트를 청취하면서 다른 sshd를 시작해야합니다 (포트 22가 아니므로 일반 sshd 데몬을 중지 할 필요가 없습니다).
# /usr/sbin/sshd -p 2222 -ddd
그 sshd는 하나의 연결 만 허용하고 백그라운드로 들어 가지 않습니다. 다른 터미널을 열고 해당 ssh 세션에 연결하십시오.
# ssh -vvv -p 2222 user@host
동일한 브랜드의 다른 서버 중 하나와받는 메시지를 비교할 수 있습니다. 그러면 문제가 ssh 측에 있는지 여부를 알 수 있습니다.
(-ddd 및 -vvv는 최대 디버그 수준이므로 조정할 수 있습니다)
나는 가지고 링크 , 훨씬 더 자세히 설명합니다.
답변
내 문제에 대한 답
그것은 네트워킹 문제였습니다. 결국 모든 네트워크 카드의 MTU를 약간 떨어 뜨림으로써 문제가 사라 졌다는 것을 알았습니다.
아마도 해당 네트워크에 대해 잘못 구성되었을 가능성이 있지만 이제는이를 증명하고 네트워크 팀 (서버 문제라고 계속 알려주는 네트워크 팀)에게 전달할 수 있습니다.
그러나 이것이 최후의 수단
이라는 점을 명심하십시오. ssh 서버는 동일한 서브넷에서 작동했지만 외부에서는 작동하지 않았으며 ssh -t ‘/ bin / bash’는 어디에서나 작동했습니다.
또한 rsync가 제대로 시작되었지만 어느 시점에서 중단되거나 연결이 끊어졌습니다.
따라서이 답변을보고 있다면 위의 다른 방법을 먼저 시도하고 내 것과 같은 이상한 점이있는 경우에만 도움이 될 것입니다.
모든 도움을 주셔서 감사합니다. 나는 모든 것을 시험해 보았고로드를 가르치고 서버와 아무런 관련이 없음을 확인하도록했습니다 (바람직한 모든 것).
도와 주신 모든 분께 감사드립니다
답변
당신이 할 때 ssh some_user@some_host /bin/bash
, 당신이하고있는 일은 시작됩니다 some_user을 (에 정의 된대로의 쉘 /etc/passwd
에 some_host )하고, 주어진 명령을 실행 /bin/bash
하는 쉘 내에서.
지금, some_user 의 쉘 ( 이것도 가정합니다 bash
)이 대화 형으로 시작되지 않습니다 (대신 주어진 명령을 실행하고 있습니다). 따라서 pty ( 의사 터미널을 할당하지 않습니다. )를 발행 된 명령에 사용할 pty가 없으므로 대화식으로 시작하지 않습니다.
이 예에서는 요청 된 /bin/bash
명령이 시작되었지만 중단 된 것으로 나타납니다.
물어 보면이 문제를 해결할 수 있습니다 ssh
어쨌든 pty를 작성하여 쉘 및 해당 하위 프로세스에 사용할 수 있도록 pty를 작성 . 이것이하는 일 -t
입니다.
$ ssh -t some_user@some_host bash
pty를 작성하도록 명령을 강제 실행하여이 문제를 해결할 수도 있습니다. 에 대한bash
-i
인수 를 전달하여이 작업을 수행합니다 . 다음 명령 줄도 작동해야합니다.
$ ssh some_user@some_host bash -i
그러나이 경우에는 쉘이 액세스 할 수 없습니다. /dev/tty
경고가 발생합니다.
bash: no job control in this shell
이에 대한 이유는 설명되어 있습니다 여기 있습니다 . 쉘에서 수행하려는 작업에 따라 문제가 될 수도 있고 아닐 수도 있지만 사용 ssh -t
하는 것이 더 나은 옵션 일 수 있습니다.
( bash
어쨌든 사용자의 기본 쉘 경로에 있어야하기 때문에 명령으로 전달할 수 있습니다 )
답변
최근에 중첩 가상화 플랫폼을 사용할 때도 같은 문제가 있습니다.
원본 또는 대상 서버에서 MTU를 1500에서 1400으로 줄인 후에 작동합니다.
/sbin/ip link set dev eth0 mtu 1400