我正在使用 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 上有效