本文标题取名为“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 时,就非常有用了。 |