多彩的 ssh 横幅

Pat*_*ryk 7 colors bash ssh profile

我想为我的 ssh 横幅着色。我知道我可以像这样执行它:

/etc/profile我可以放:

echo -e "\e[1;31m Colorful text"
echo -e "\e[0m Reset"
Run Code Online (Sandbox Code Playgroud)

但是我在横幅中有一些带有特殊字符的 ASCII 艺术。有没有办法在不转义 ASCII 艺术中的每个特殊字符的情况下对其进行着色?

ter*_*don 10

你可能想看看toilet。我实验室的其中一台服务器的横幅中包含以下内容:

在此处输入图片说明

您可以使用以下命令将其安装在基于 Debian 的系统上

sudo apt-get install toilet
Run Code Online (Sandbox Code Playgroud)

TOIlet 使用由小字符组成的大字符打印文本。它在许多方面与 FIGlet 相似,但具有附加功能,例如 Unicode 处理、颜色字体、过滤器和各种导出格式。

toilet 与 ASCII 艺术完美搭配:

在此处输入图片说明


我编写了一个小的 Perl 脚本来突出显示文本中的特定正则表达式。如果您.用作正则表达式,它将为所有内容着色特定颜色:

在此处输入图片说明

脚本(-h用于微小的帮助信息):

#!/usr/bin/env perl
use Getopt::Std;
use strict;
use Term::ANSIColor; 

my %opts;
getopts('hic:l:',\%opts);
    if ($opts{h}){
    print "Use -l to specify the letter(s) to highlight. To specify more than one patern use commas.\n -i makes the search case sensitive\n -c: comma separated list of colors\n";
    exit;
    }
my $case_sensitive=$opts{i}||undef;
my @color=("bold blue",'bold red', 'bold yellow', 'bold green', 'bold magenta', 'bold cyan', 'yellow on_magenta', 'bright_white on_red', 'bright_yellow on_red', 'white on_black');
if ($opts{c}) {
   @color=split(/,/,$opts{c});
}
my @patterns;
if($opts{l}){
     @patterns=split(/,/,$opts{l});
}
else{
    $patterns[0]='\*';
}
# Setting $| to non-zero forces a flush right away and after 
# every write or print on the currently selected output channel. 
$|=1;

while (my $line=<>) 
{ 
    for (my $c=0; $c<=$#patterns; $c++){
      if($case_sensitive){
        if($line=~/$patterns[$c]/){
        $line=~s/($patterns[$c])/color("$color[$c]").$1.color("reset")/ge; 
        }
      }
      else{
        if($line=~/$patterns[$c]/i){
          $line=~s/($patterns[$c])/color("$color[$c]").$1.color("reset")/ige; 
        }
      }
    }
    print STDOUT $line;
}
Run Code Online (Sandbox Code Playgroud)


slm*_*slm 6

根据我在其他 U&L 问答中的研究,标题为:sshd 横幅中的非 ASCII 可打印字符,不可能让 SSH 的横幅工具打印输出着色所需的转义序列。这实际上是出于安全原因设计的。

因此,以这种方式打印 SSH 横幅是不可能的。

  • `/etc/issue.net` 不支持 ANSI 颜色,但是 `/etc/motd` 支持。在 Ubuntu 14.04 LTS 和 CentOS 6.X 上测试 (2认同)