Ssh
為什麼啟用“RequestTTY force”選項時 SCP 會失敗?
RequestTTY force
在我的 SSH 配置文件中,出於一些重要原因,我必須啟用 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
選項並且文件也可以正確複製?
有很多可能的解決方案:
- 您可以配置
sudo
不要求 tty:RequireTTY
在/etc/sudoers
- 在這些特定情況下,您可以在需要時在命令行上強制分配 tty:
ssh -tt host command
- 您可以通過或命令行選項告訴
scp
不要分配 TTY :或-T``-o RequestTTY=no``scp -T file host:path/``scp -o RequestTTY=no file host:path/
已經解釋了它發生的原因。TTY 控製字元破壞了二進制協議,反之亦然。
- SCP 協議是二進制的。
- 啟用 TTY 後,控製字元有其含義。
因此,一旦 TTY 在 SCP 協議二進制數據中看到一個作為控製字元出現的字元,它就會對其進行解釋。特別是一旦出現
^C
(ASCII 0x03),它就會中止 SCP 程序。用於
ssh -t
強制 TTY 進行互動式會話,而不是使用RequestTTY
.