ssh客户端如何区分文本颜色

时间:2013-12-26 06:45:46

标签: java ssh

我正在尝试使用java库'sshj'编写一个简单的ssh客户端。

try {
    session = ssh.startSession();
    try {
        final Command cmd = session.exec("ls");
        System.out.println(IOUtils.readFully(cmd.getInputStream()).toString());
    } finally {
        session.close();
    }
} finally {
    ssh.disconnect();
}

但是,我的问题是我无法弄清楚ssh客户端(如putty或iterms)如何区分文本颜色(例如,vi中的颜色或命令'ls'结果的颜色)。

我使用'ssh protocol text color'之类的查询搜索了一下Google,但我找不到令人满意的结果。

我找到了一些ssh java库,比如jsch,sshj和sshtools,以及 我正在使用sshj,因为它是短代码。但是如果您对这些库有任何意见,请随时与我分享:)

1 个答案:

答案 0 :(得分:1)

ssh只是在服务器和客户端之间转发(和加密/解密)字节。在大多数情况下,服务器运行的是unix shell,“bytes”只是来自该shell的stdin / stdout / stderr。

如果在该shell中运行vim,则字节由vim生成。要做颜色(语法高亮),光标定位等特殊内容,vim将发送转义序列,这是以“ESCAPE”字节(十六进制27)开头的一系列字节。

转义序列源于“绿色终端”的时代,并被物理终端或终端仿真器解释为“指令”。油灰。

Vim和其他复杂的终端程序将查找$ TERM环境变量,以确定您使用客户端的终端。根据该值,转义序列(与终端相关的指令)将不同。

您可以在互联网上找到许多终端转义序列列表,例如对于ansi:https://en.wikipedia.org/wiki/ANSI_escape_code