내 SSH 배너에 색상을 지정하고 싶습니다. 나는 다음과 같이 할 수 있다는 것을 알고 있습니다.
다음을 입력 할 /etc/profile
수 있습니다.
echo -e "\e[1;31m Colorful text"
echo -e "\e[0m Reset"
하지만 배너에 특수 문자가 포함된 ASCII 아트가 있습니다. ASCII 아트의 모든 특수 문자를 이스케이프 처리하지 않고 색상을 지정할 수 있는 방법이 있습니까?
답변1
한 번 살펴보고 싶을 수도 있습니다toilet
. 내 연구실 서버 중 하나의 배너에 다음 콘텐츠가 있습니다.
Debian 기반 시스템에 설치할 수 있습니다:
sudo apt-get install toilet
TOIlet은 작은 문자로 구성된 큰 문자를 사용하여 텍스트를 인쇄합니다. 여러 면에서 Figlet과 유사하지만 유니코드 처리, 색상 글꼴, 필터 및 다양한 내보내기 형식과 같은 추가 기능이 있습니다.
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;
}
답변2
U&L의 다른 Q&A에 대한 내 연구에 따르면 다음과 같습니다.SSHD 배너에 ASCII가 아닌 인쇄 가능한 문자가 있습니다.출력 색상에 필요한 이스케이프 시퀀스를 인쇄하기 위해 SSH의 배너 도구를 얻는 것은 불가능합니다. 이는 실제로 보안상의 이유로 설계되었습니다.
따라서 이 방법으로는 SSH 배너를 인쇄할 수 없습니다.