RequestTTY force
내 SSH 구성 파일에서 몇 가지 중요한 이유로 이를 활성화해야 합니다. 현재 내 구성 파일은 다음과 같습니다.
Host x.x.x.x
HostName yyyy
StrictHostKeyChecking no
RequestTTY force
IdentityFile ~/path/id_rsa
그러나 이제 명령을 실행하면 scp
완료되지만 대상 경로에 빈 파일이 생성되고 아래는 생성되는 로그입니다.
debug2: channel 0: read<=0 rfd 4 len 0
debug2: channel 0: read failed
debug2: channel 0: close_read
debug2: channel 0: input open -> drain
debug2: channel 0: ibuf empty
debug2: channel 0: send eof
debug2: channel 0: input drain -> closed
debug2: channel 0: write failed
debug2: channel 0: close_write
debug2: channel 0: send eow
debug2: channel 0: output open -> closed
RequestTTY force
그러나 구성 파일의 옵션을 주석 처리하면 올바르게 실행되고 파일이 올바르게 복사됩니다.
왜 이런 문제가 발생합니까? 옵션 을 비활성화하지 않아도 RequestTTY force
파일이 올바르게 복사될 수 있도록 해결 방법을 제공할 수 있는 사람이 있습니까?
답변1
가능한 해결 방법은 다양합니다.
sudo
tty가 필요하지 않도록 구성할 수 있습니다RequireTTY
./etc/sudoers
- 이러한 특정한 경우에는 필요할 때 명령줄에서 tty 할당을 강제로 수행할 수 있습니다.
ssh -tt host command
- 명령줄 옵션을 통해 TTY를 할당하지 않도록 지정할 수 있습니다
scp
. 또는-T
-o RequestTTY=no
scp -T file host:path/
scp -o RequestTTY=no file host:path/
이런 일이 발생하는 이유는 이미 설명되었습니다. TTY 제어 문자는 바이너리 프로토콜을 깨뜨리고 그 반대의 경우도 마찬가지입니다.
답변2
- SCP 프로토콜은 바이너리 프로토콜입니다.
- TTY가 활성화되면 제어 문자에 의미가 있습니다.
따라서 TTY는 SCP 프로토콜 바이너리 데이터에서 제어 문자로 나타나는 문자를 확인하면 이를 해석합니다. 특히, 이 문제가 발생하면 ^C
(ASCII 0x03) SCP 프로세스가 중단됩니다.
ssh -t
를 사용하는 대신 대화형 세션에 대해 TTY를 강제하는 데 사용됩니다 RequestTTY
.
답변3
나에게는 다음이 효과적이었습니다.
Host *.bla.fasel.com
User horst
RequestTTY yes
ssh
그리고 sudo -i
:
$ ssh guenther.bla.fasel.com sudo -i
[email protected]'s password:
[email protected]:~#
scp
사용자 이름/비밀번호 인증 사용:
$ scp guenther.bla.fasel.com:/etc/passwd .
Pseudo-terminal will not be allocated because stdin is not a terminal.
[email protected]'s password:
passwd