我的 ssh 客户端上的退格键不起作用

我的 ssh 客户端上的退格键不起作用

我使用 SSH 客户端版本 3.2.9 通过 SSH 连接到 unix 服务器。当我登录到服务器时,几个关键功能不起作用。举几个例子:退格键(改为按 ^H,但可以使用 shift+backspace),当我按下时<tab>没有得到建议,~ 不会带我回到主页。

我的主文件夹中有 local.cshrc、local.login 和 local.profile(当我登录时)。

以下是 local.profile 中的内容

$ more local.profile
#
# Copyright (c) 2001 by Sun Microsystems, Inc.
# All rights reserved.
#
# ident "@(#)local.profile      1.10    01/06/23 SMI"
stty istrip
PATH=/opt/sunone_apps/Dep/POL/:/usr/bin:/usr/ucb:/etc:.


export PATH

答案1

一个快速的解决方法是:

stty erase <backspace>

在那里,您尝试按退格键。在该行末尾按回车键,从那时起,系统将识别出这是您的退格键 - 但它只会在该会话期间保留。

这是一个临时的解决方案,适用于当您不想注销、更改终端类型并重新登录时。

答案2

永久修复: 我以前也见过这样的问题。

以退格键为例,远程主机希望使用某些字符作为“擦除/退格键”,当您在终端中按下退格键时,终端程序将向远程主机发送一些字符,如果远程主机期望的字符与终端程序发送的字符不同,您就会遇到此问题。因此,快速修复方法如下:

在远程主机中运行命令#stty -a,并在输出中找到预期的擦除代码。假设为:erase=^?。在终端中,键入Ctrl v并按下退格键。您将看到发送的代码为“erase”。假设是^H。在远程主机中,运行#stty erase ^H。您可以使用与上述相同的方法修复 Tab 问题。

答案3

您的问题可能与缺少 terminfo 文件有关。

就我而言,这里的建议都不起作用。事实上,我的终端正在^?向擦除发送消息(当我按下退格键时),这符合服务器对擦除字符的期望,但我仍然无法擦除。

对我有用的方法是将客户端的 terminfo 文件安装到服务器的 terminfo 数据库中。每个系统都有一个受支持的终端数据库,通常位于 中/usr/share/terminfo。该系统中的每个用户可能都有自己的私有受支持终端数据库,通常位于 中~/.terminfo。如果您的特定终端不在任何一个数据库中,您很可能会遇到此问题或其他问题。

为了解决,

  1. 通过运行来生成客户端的 terminfo 文件infocmp > $TERM.ti。(文件名实际上无关紧要。)
  2. 复制$TERM.ti到服务器。(例如,使用scp,因为您已经在使用 ssh。)
  3. 从服务器上,tic $TERM.ti从您复制到的目录运行$TERM.ti。(这会将客户端终端的 terminfo 安装到服务器用户的 terminfo 数据库或系统的 terminfo 数据库(如果您以超级用户权限运行该命令)。)
  4. 在服务器上重新启动终端。(运行可能$0会有效。)

答案4

通常这是由于您的终端未被远程端识别所致。如果您正在连接到旧的 Unix 或 Linux 系统,您可能需要将终端类型更改为 vt100。

相关内容