「RequestTTYを適用」オプションが有効になっているとSCPが失敗するのはなぜですか?

「RequestTTYを適用」オプションが有効になっているとSCPが失敗するのはなぜですか?

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

考えられる解決策はさまざまです。

  • sudottyが不要になるように設定できますRequireTTY/etc/sudoers
  • これらの特定のケースでは、必要に応じてコマンドラインからtty割り当てを強制することができます。ssh -tt host command
  • コマンドラインオプションを使用してTTYを割り当てないように指定できますscp。または-T-o RequestTTY=noscp -T file host:path/scp -o RequestTTY=no file host:path/

これが起こる理由はすでに説明されています。 TTY制御文字はバイナリプロトコルを壊し、その逆も同様です。

おすすめ記事