SSH 的转义字符

陪她去流浪 桃子 2020年09月21日 编辑 阅读次数:2757

本文标题取名为“SSH 的转义字符”,但是我猜应该少有人知道“转义字符”对于 SSH 来说是什么东西,有什么作用。 毕竟,谁还不是一上来就是 ssh host 就上主机操作了呢?

但是,我想每个人在使用 SSH 时都曾遇到过这样一个问题:一段时间未操作或是网络连接不稳定(被断开导致假死)时,无论你在 SSH 里面输入什么东西半天没反应,回车也没用,绝大多数人此时唯一能做的,就是:关闭终端窗口,然后重新 SSH。 (这样有一个风险:可能命令历史会搞丢,虽然不是很重要。)

其实我想说,大家不用这么暴力,因为:SSH 是运行在本地的一个进程,所有发送给服务器的字符都是要经过 SSH 预先处理的。 而今天要讲的“转义字符”,就是基于此。

比如:大家知道 Ctrl-Z 可以把运行在 SSH 里面的进程给放到(服务器的)后台执行,那么有谁知道怎么把 SSH 本身放到(本地的)后台执行呢?

转义字符

默认情况下,SSH 的默认转义字符是 ~,没错,就是在 1 的左边、会被展开成 HOME 目录的那个键。

特别注意:转义字符这个键只有紧跟在回车键之后按下才有转义作用。

按下转义字符之后,再跟随其它键,便组成了转义字符序列,以实现某个特定的功能。 因为它在等待你继续按下字符,所以转义字符要等到下一个字符按下后才会出现。

常用的转义字符序列

下面我就列出一些常用的(很少几个)“转义字符序列”方便大家日常使用。

来源于 SSH 的手册:ESCAPE CHARACTERS - OpenBSD manual pages

转义序列 功能说明
~? 显示所有可用的转义字符序列
~. 强制断开当前的 SSH 连接,这在“网络假死”的时候就非常有用了
~^z 把 SSH 进程放到后台运行,回到本地 Shell (fg 可以再次回到 ssh)
~# 显示所有的端口转发连接
~~ 发送 ~ 字符。这在 ssh A 里面开启另外一个 ssh B 时,如果想要结束 ssh B 时,就非常有用了。

标签:ssh · 转义字符