一件事就是将其连接到终端。但是如果我们想在没有

Get accurate and active Loan Data.
Post Reply
rubinaakter
Posts: 123
Joined: Thu Dec 05, 2024 5:07 am

一件事就是将其连接到终端。但是如果我们想在没有

Post by rubinaakter »

使用Secure Shell (SSH) 协议访问远程计算机时,可能会出现错误“未分配伪终端,因为stdin 不是终端”。

伪终端是物理终端的替代品,保留了终端的所有功能。当我们尝试通过 SSH 连接到设备时,它尝试做的第一件事就是将其连接到终端。但是如果我们想在没有终端的情况下连接到远程设备怎么办?

例如,我们想要将一个命令的标准输入(stpin)重定向到另一个命令。这种场景可能与诸如“伪终端未分配...”之类的问题相关联。

在本文中,我们将了解错误发生的原因以及如何修复它。

错误原因
根据我们的经验, “由于标准输入不是终端而未分配伪 多米尼加共和国手机号码数据库
终端”错误有几个可能的原因。在这里我们将列出其中的一些。

在没有终端的远程设备上运行交互式命令,例如:
$ ssh user@host 'vim file.txt'复制
复制
尝试执行以下命令
须藤

Image

- 无需在远程设备上运行终端所需的权限,如下所示:
$ ssh user@host 'sudo apt update'复制
复制
尝试一个
标准输入
- 从远程计算机上的文件或其他命令执行重定向命令:
$ssh user@host 'cat file.txt' < input.txtCopy
复制
从脚本运行 SSH 命令。
错误的解决方法
尽管导致该错误的可能原因有很多,但也有多种方法可以修复它。我们将研究其中三个:强制伪 TTY 分配、禁用伪 TTY 分配和 Shell 规范。

伪 TTY 分配强制执行
为了消除伪 TTY 分配强制错误,我们需要对ssh使用-t 选项。即使stdin不是终端,它也会强制ssh分配pty 。

如果您想在远程计算机上以sudo权限运行命令,则此方法特别有用。以下命令允许您远程访问服务器并使用 Vim 文本编辑器以交互方式编辑文件:

$ ssh -t user@host 'vim file.txt'复制
复制
然后,您可以使用sudo命令和远程服务器上的关联管理权限来更新软件包列表(在 Ubuntu 操作系统上) :

$ ssh -t user@host 'sudo apt update'复制
复制
在这两个示例中,-t选项强制分配终端。然而, -t选项并不是一刀切的解决方案。在某些情况下,我们需要使用 double -t或-tt。-tt选项简化了tty分配,无需本地tty。这样的命令对于在远程计算机上执行stdin重定向很有用:

$ ssh -tt user@host 'cat file.txt' < input.txtCopy
复制
-t选项强制进行伪 TTY 分配,从而修复错误。

禁用伪 TTY 映射
我们还可以使用 SSH 的-T选项来完全禁用伪 TTY 分配。-T选项强制 ssh 不分配远程计算机。因此,对于不需要终端的命令,此选项很有用:

$ ssh -T user@host 'ls -l'复制
复制
这里Is -I命令立即结束映射。

外壳规格
为了摆脱“未分配伪终端,因为 stdin 不是终端”错误,我们还可以在远程计算机上指定 shell。默认的 SSH 设置是使用远程用户的登录 shell 来执行命令。但是,某些 shell 与stdin重定向不兼容,这可能会导致像我们这样的错误。

为了避免这种情况,我们可以指定 shell:

$ ssh user@host '/bin/bash -c "cat file.txt < input.txt"'复制
复制
此命令的目标是 bash shell链接file.txt和input.txt的内容。

总之
在本指南中,我们重点介绍了修复“伪终端未分配,因为 stdin 不是终端”错误的三种方法:伪 TTY 分配、禁用伪 TTY 分配和 shell 规范。

这些方法允许您运行命令而无需面临任何进一步的终端映射问题
Post Reply