カラフルなSSHバナー

カラフルなSSHバナー

私のSSHバナーに色を付けたいです。私は次のようにできることを知っています。

次のように入力でき/etc/profileます。

echo -e "\e[1;31m Colorful text"
echo -e "\e[0m Reset"

しかし、バナーに特殊文字を含むASCIIアートがあります。 ASCIIアートのすべての特殊文字をエスケープせずに色を指定する方法はありますか?

答え1

一度見てみたいかもしれませんtoilet。私の研究室サーバーの1つのバナーには、次のコンテンツがあります。

ここに画像の説明を入力してください。

Debianベースのシステムにインストールできます。

sudo apt-get install toilet

TOIlet は、小文字で構成される大文字を使用してテキストを印刷します。多くの点で Figlet に似ていますが、Unicode 処理、カラーフォント、フィルタ、さまざまなエクスポート形式などの追加機能があります。

toiletASCIIアートと完璧に動作します。

ここに画像の説明を入力してください。


私はテキストで特定の正規表現を強調するために小さな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;
}

答え2

U&Lの他のQ&Aに関する私の研究によると、SSHDバナーにASCII以外の印刷可能文字があります。出力色に必要なエスケープシーケンスを印刷するためにSSHのバナーツールを取得することは不可能です。これは実際にはセキュリティ上の理由で設計されています。

したがって、この方法ではSSHバナーを印刷できません。

関連情報