2

使用 Golang 实现 SSH 和 SSHD(三)

 2 years ago
source link: https://pandaychen.github.io/2022/01/01/A-GOLANG-SSHD-BASH-CONTROL-CHARS/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

0x00 前言

项目中,需要实现 OpenSSH 字符终端审计及输入命令还原,因而需要了解 Bash 中的特殊按键行为及其对终端屏显的影响。本篇文章梳理下特殊按键的行为。

0x01 常用按键对应的 ascii 码

按键 name ASCII-HEX
ENTER 回车 0x03

0x02 CTRL 类指令

本小节仅针对 /bin/bash 的行为: 不区分大小写:

  • CTRL+A:当前光标移动到首位(移到命令行首) img
  • CTRL+B:当前光标向前移动 1 位 / 个字符(直至首位)(按字符移动(左向))
  • CTRL+C:取消当前行指令,停止当前运行的命令。如果一个命令运行时间过久,或者你误运行了,可以使用本指令来强制停止或退出 img
  • CTRL+D:从当前光标开始,向后依次删除 1 个字符,即删除光标后的一个字符;如果当前行无字符,直接退出当前会话(和 exit 指令类似)
  • CTRL+W:删除光标前的一个单词(注意,和 CTRL+U 不一样,CTRL+W 不会删除光标前的所有东西,而是只删除一个单词)。如下面的例子,输入为 ifconfig eth1,光标在 h 处,本指令操作结果如下: img1img2
  • CTRL+E:移到当前行命令行尾(移到命令行尾),和 END 键功能类似
  • CTRL+R:reverse-search
  • CTRL+T:有趣:当前光标前的两个位置字符位置相互调换(交换光标处和之前的字符,交换最后两个字符)
  • CTRL+U:删除光标前的所有字符(从光标后的点删除到行首),该指令立刻删除前面的所有字符。和 W 不一样的在于,本指令从光标处删除至命令行首
  • CTRL+I:类似于 Tab 补全的功能
  • CTRL+O:类似于 Enter 的功能,执行当前命令,并选择上一条命令
  • CTRL+P:类似于上箭头 UPARROW 的功能
  • CTRL+F:从当前光标开始,依次向后移动 1 个位置(B 的反向)(按字符移动(右向))
  • CTRL+H:从当前光标开始,依次向前删除 1 个字符,即删除光标前的一个字符,和退格键的功能相同
  • CTRL+J:类似于 Enter 的功能
  • CTRL+K:删除当前光标位置(包含此位置的字符),之后所有的字符(U 的反向)。即删除光标后的所有字符
  • CTRL+L:清屏
  • CTRL+X:光标的当前位置移动到行首,再次输入,恢复到先前的位置(在命令行首和光标之间移动)
  • CTRL+V:复制(插入)缓冲区的内容到当前光标处
  • CTRL+M:类似于 Enter 的功能
  • CTRL+Y:恢复上一个删除或剪切的条目。比如使用 CTRL+W 删除了单词 eth1。你可以使用 CTRL+Y 立刻恢复
  • CTRL+Z:停止当前的命令,即终止了当前运行的命令。可以在前台使用 fg 或在后台使用 bg 来恢复
  • CTRL+[:和 ESC 键等同
  • CTRL+G:退出历史搜索模式,不运行命令
  • CTRL+O:运行使用反向搜索时发现的命令,即 CTRL+R
  • CTRL+R:向后搜索历史记录(使用反向搜索时)
  • CTRL+S:向前搜索历史记录

有意思的点

  • CTRL+J:和 ENTER/RETURN 键相同。CTRL+JCTRL+M 可以用来替换回车键
  • CTRL+N:在命令历史中显示下一行,等同于下箭头键 DownArrow
  • CTRL+B:光标向前移动一个字符。等同于左箭头键 LeftArrow
  • CTRL+F:光标向后移动一个字符,等同于右箭头键 RightArrow
  • CTRL+P:显示命令历史的上一条命令,等同于上箭头键 UpArrow

0x03 ALT 类命令

  • ALT+F:按单词后移(右向)
  • ALT+B:按单词前移(左向) img
  • ALT + D :从光标处删除至单词尾,不一定是行尾
  • ALT + C :从光标处更改为首字母大写的单词,并且光标移动到单词尾部
  • ALT + U :从光标处更改为全部大写的单词,并且光标移动到单词尾部
  • ALT + L :从光标处更改为全部小写的单词,并且光标移动到单词尾部
  • ALT + T :交换光标处和之前位置的两个单词
  • ALT + Backspace:与 CTRL + W 类似,分隔符有些差别

0x04 模拟键盘操作的状态机实现

0x05 参考


Related Issues not found

Please contact @pandaychen to initialize the comment


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK