通过管道 ssh 到 shell 脚本但看不到 stdin echo

通过管道 ssh 到 shell 脚本但看不到 stdin echo

我有一个 awk 脚本,.bashrc可以读取字符并修改一些关键字。当我通过它传输其他基本命令时,它工作得很好tail -f,但是当我通过它传输 ssh 时,我遇到了问题。一切都按预期工作正常,除了在按回车键之前我看不到在终端上输入的任何内容:

~# ssh admin@localhost -p 5200 | my-script

admin@localhost's password: 

admin connected from 127.0.0.1 using ssh on home

admin@ssh-server> exit   ***<- I don't see this line (including the prompt) at all on terminal until I type my command (exit) and press Enter***

Connection to localhost closed.

思考我明白为什么会这样,但不知道如何解决。我认为在返回 EOL 之前,不会通过管道发送 ssh 的交互式命令。我已经尝试了从 unbuffer/stdbuf 到 tee/script 搜索并使用各种重定向命令找到的所有内容,但都没有运气。

笔记:实际上,我可以在 EOL 后将字符串传递到我的脚本,我只需要能够看到我正在输入的内容,即需要终端标准输入像往常一样进行回显。

答案1

我能够执行以下操作:

$ ssh [email protected] | tee output
Last login: Tue Aug 15 03:06:11 2017 from 127.1.2.3
$ ls /
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
$ logout
Shared connection to example.com closed.
$ cat output
Last login: Tue Aug 15 03:06:11 2017 from 127.1.2.3
$ ls /
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
$ logout

ssh当我正常编辑到远程主机时,我会看到提示、我的输入以及其他所有内容。

答案2

如果您的交互式 shell 不需要终端即可工作,请考虑通过添加选项-T来禁用 SSH 客户端中的 PTYSSH(1)命令。您将能够看到您的输入,因为在这种情况下回显是在您的本地终端中完成的。

请注意,OpenSSHSSH(1)如果启用 PTY,则将 stderr 重定向到 stdout,因此如果禁用 PTY,您的脚本可能会获取更少的数据。也可以看看https://stackoverflow.com/questions/16838624/why-does-openssh-requesttty-cause-stderr-redirected-to-stdout

相关内容