使用“expect”启动的 SSH shell 没有全宽。我该如何修复它?

使用“expect”启动的 SSH shell 没有全宽。我该如何修复它?

我正在使用 expect 从 Unity 启动器自动登录 SSH,命令如下所示:

gnome-terminal -t SSH1 -e "expect -c 'spawn ssh [email protected] ; expect assword ; send \\"password123\\n\\" ; interact'"

这对于自动登录来说很好,但是如果我最大化 gnome-terminal 窗口,ssh shell 内容会保持较小,就好像窗口具有默认大小一样,如下所示:

截屏

起初我以为是因为 gnome-terminal 是以默认大小启动的,而当最大化时由于某种原因 ssh 的内容没有调整大小,但后来我添加了gnome-terminal --window --maximize命令,同样的问题仍然存在,窗口开始最大化,但 ssh shell 文本仍然是默认终端的大小。

另外,如果我只是打开一个终端并在顶部输入该命令,我会遇到与从 Unity 启动器启动它相同的问题。

有什么想法可能导致这种情况以及如何解决?

答案1

在您的期望脚本顶部使用以下内容:

#trap sigwinch and pass it to the child we spawned
trap {
 set rows [stty rows]
 set cols [stty columns]
 stty rows $rows columns $cols < $spawn_out(slave,name)
} WINCH

答案2

获得所需效果的更好方法是使用 ssh 密钥,例如恩佐替布建议。

第一的

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ ssh-keygen -t rsa

在每个提示符下按 Enter 键,将字段留空,将创建一个没有密码的默认密钥。这就是你想要的。

接下来将公钥推送到服务器。

$ ssh-copy-id [email protected]

最后使用以下命令创建启动器:

gnome-terminal -t SSH1 -x ssh [email protected]

答案3

这与 Expect 用于终端设置的环境变量有关。

通过在 Expect 脚本的开头添加以下行可以轻松修复此问题:

set ::env(TERM) vt100

我发现如果你有任何彩色字符。如果你想看到彩色字符,你也可以尝试:

set ::env(TERM) xterm

答案4

将其添加到您的代码中:

trap {
    set XZ [stty rows   ]
    set YZ [stty columns]
    stty rows $XZ columns $YZ < $spawn_out(slave,name)
} WINCH

这似乎对我在 Ubuntu 17.10 上有效

相关内容