How to deal with “Pseudo-terminal will not be allocated because stdin is not a terminal.”
1 | ssh -t remotehost vim /tmp/x.txt |
我知道我可以执行上面这样的命令。
但我希望能够在远程机器中运行任何本地bash代码。出于这个原因,我想调用远程"bash-s",以便能够处理任何本地bash代码。
1 | ssh -t remotehost 'bash -s' <<< vim /tmp/x.txt |
但是,上面的示例显示"由于stdin不是终端,所以不会分配伪终端。"有没有任何方法可以让ssh通过stdin获取本地bash代码并通过远程"bash-s"运行它?谢谢。
1 | ssh -t remotehost 'bash -s' <<< vim /tmp/x.txt |
当ssh进程的标准输入不是tty时,您将收到"伪终端将不会被分配…"消息,因为您正在使用单个
-t
Force pseudo-terminal allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.
RequestTTY
Specifies whether to request a pseudo-tty for the session. The argument may be one of: no (never request a TTY), yes (always request a TTY when standard input is a TTY), force (always request a TTY) or auto (request a TTY when opening a login session). This option mirrors the -t and -T flags for ssh(1).
单个
如果希望远程命令与tty一起运行,请指定
1 2 3 | ssh -tt remotehost 'bash -s' <<< vim /tmp/x.txt or ssh -t -t remotehost 'bash -s' <<< vim /tmp/x.txt |
ssh将为远程系统分配一个tty,它不会打印该消息。
如果在远程系统上运行的命令不需要tty,则可以将
1 | ssh remotehost 'bash -s' <<< vim /tmp/x.txt |
我相信以下内容可能适合您的目的:
1 | vim /tmp/x.txt ; ssh remotehost 'bash -s' < /tmp/x.txt |
第一个表达式(
此解决方案似乎适用于以下文件内容:
1 2 | echo These commands are being executed on $HOSTNAME echo This is a second command |