在SSH Session中回滚长命令导致显示问题

问题

在使用NE40e后,SSH Session中通过“上”、”下”回滚长命令总会遇到显示问题,必须多按几个回车才能刷掉显示乱的屏幕,如下所示:

此问题困扰我很长时间了,一直没仔细研究过,这次趁着有些时间想彻底把这个问题解决下。下面是整个ssh的过程:

SCRT ----- 1st 跳板机 ----- 2nd 跳板机 ----- NE40E

解决

通过对比发现只有当通过脚本登录NE40E时才会有此问题,如果直接SSH登录NE40E就不会有问题,那么问题跟脚本相关么?

2nd 跳板机 ---python script--- NE40E
2nd 跳板机 ---ssh--- NE40E

我把此段Python脚本复制下来,放到Lab中,发现可以通过同样的脚本在NE40E的模拟器中复现此问题,如果不用脚本,那么就没问题,所以问题出在脚本上,脚本很简单,没有什么特别的,如下:

import pexpect
import getpass,os
import re

login = pexpect.spawn('ssh test@1.1.1.1')
index = login.expect([
    'continue',
    'word:',
])

if index == 0:
    login.sendline('yes')
    time.sleep(1)
    login.sendline('test123')
elif index == 1:
    login.sendline('test123')

login.interact()

经过查找且和同事讨论后,发现此问题是由于pexpect登录SSH session时窗口大小导致的,默认这个窗口大小是(24 rows, 80 cols),在这个大小中,当输入长命令时,超过了窗口大小,因此出现显示问题,需要通过增加“login.setwinsize(400,400)”来增加这个窗口大小,从而fix此问题,另外注意此命令只在python3中生效,python2中此命令不生效:

$ more test.py 
import pexpect
import getpass,os
import re

login = pexpect.spawn('ssh Hutaojie@100.127.10.203')
print(login.getwinsize())
login.setwinsize(400,400)
print(login.getwinsize())
index = login.expect([
    'continue',
    'word:',
])

if index == 0:
    login.sendline('yes')
    time.sleep(1)
    login.sendline('Pdd@SYS+Network')
elif index == 1:
    login.sendline('Pdd@SYS+Network')

login.interact()
$ python3 test.py 
(24, 80)
(400, 400)


Info: The max number of VTY users is 21, the number of current VTY users online is 1, and total number of terminal users online is 1.
      The current login time is 2022-12-27 19:55:28+08:00.
<SH-01>

虽然问题彻底解决了,但排障中发现NE40E无法针对当前SSH Session查看窗口大小等详细的参数,如果有命令可以展示更详细的session参数,问题应该更容易解决:

<SH-01>dis ssh server session 
--------------------------------------------------------------------------------
Session                                 : 1
Conn                                    : VTY 1   <<< issue session
Version                                 : 2.0
State                                   : Started
Username                                : test
Retry                                   : 1
CTOS Cipher                             : aes128-ctr
STOC Cipher                             : aes128-ctr
CTOS Hmac                               : hmac-sha2-256
STOC Hmac                               : hmac-sha2-256
CTOS Compress                           : none
STOC Compress                           : none
Kex                                     : ecdh-sha2-nistp256
Public Key                              : ECC
Service Type                            : stelnet
Authentication Type                     : password
Connection Port Number                  : 22
Idle Time                               : 00:00:00
Total Packet Number                     : 124
Packet Number after Rekey               : 124
Total Data(MB)                          : 0
Data after Rekey(MB)                    : 0
Time after Session Established(Minute)  : 4
Time after Rekey(Minute)                : 4

Session                                 : 2
Conn                                    : VTY 2   <<< good session
Version                                 : 2.0
State                                   : Started
Username                                : test
Retry                                   : 2
CTOS Cipher                             : aes128-ctr
STOC Cipher                             : aes128-ctr
CTOS Hmac                               : hmac-sha2-256
STOC Hmac                               : hmac-sha2-256
CTOS Compress                           : none
STOC Compress                           : none
Kex                                     : ecdh-sha2-nistp256
Public Key                              : ECC
Service Type                            : stelnet
Authentication Type                     : password
Connection Port Number                  : 22
Idle Time                               : 00:00:05
Total Packet Number                     : 202
Packet Number after Rekey               : 202
Total Data(MB)                          : 0
Data after Rekey(MB)                    : 0
Time after Session Established(Minute)  : 1
Time after Rekey(Minute)                : 1
--------------------------------------------------------------------------------

本文出自 Frank's Blog

版权声明:


本文链接:在SSH Session中回滚长命令导致显示问题
版权声明:本文为原创文章,仅代表个人观点,版权归 Frank Zhao 所有,转载时请注明本文出处及文章链接
你可以留言,或者trackback 从你的网站

留言哦

blonde teen swallows load.xxx videos