找回密码
 register

QQ登录

只需一步,快速开始

[*网络运维*] Proxmox VE (PVE 8.0) 定制 Linux 终端登录消息

[复制链接]

[*网络运维*] Proxmox VE (PVE 8.0) 定制 Linux 终端登录消息

[复制链接]
Waylee

主题

0

回帖

1万

积分

仙帝

积分
10124
Waylee 2024-9-5 13:14 | 显示全部楼层 |阅读模式

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?register

×
使用 SSH 登录服务器的时候,会有欢迎信息,那么咱就想能不能给他整好看一点呢?
比如这样?
333.jpg
通过 Linux 的 motd(Message of the Day)可以很方便的修改登录信息,下面就动手。
本文均以 Debian 系统为例,其他发行版可能略有出入,请自行查证。

motd 消息组成
以 Debian 为例,默认的登录消息是这样的,下面就先来看看这玩意是怎么生成的。
  1. Linux pve 6.8.4-2-pve #1 SMP PREEMPT_DYNAMIC PMX 6.8.4-2 (2024-04-10T17:36Z) x86_64

  2. The programs included with the Debian GNU/Linux system are free software;
  3. the exact distribution terms for each program are described in the
  4. individual files in /usr/share/doc/*/copyright.

  5. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
  6. permitted by applicable law.
  7. Last login: Thu Sep  5 13:10:10 2024 from 192.168.0.120
复制代码
拆解
1.进入 /etc/update-motd.d 目录,可以看到一个默认的脚本,可以看下它的内容:
cd /etc/update-motd.d
ls
cat 10-uname

发现是一个标准的 Shell 脚本:
#!/bin/sh
uname -snrvm

运行一下 uname -snrvm,就是登录消息的第一部分:
Linux pve 6.8.4-2-pve #1 SMP PREEMPT_DYNAMIC PMX 6.8.4-2 (2024-04-10T17:36Z) x86_64

/etc/update-motd.d 目录下的脚本都应该是数字开头的,会根据从小到大的顺序依次执行,打印 motd 消息。
2.用 cat /etc/motd 直接查看 /etc/motd 的内容,会发现我们得到了第二部分,这就是 Debian 默认的 motd 消息,纯文本格式。
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

3.最后一部分是 Last Login 消息,是 SSH 打印的,如果想要禁用,可以在 /etc/ssh/sshd_config 中把#PrintLastLog yes 改成 PrintLastLog no。
如果想立即生效,就先检查ssh配置 sshd -t 然后执行重启 systemctl restart ssh
设置 motd
拆解完 motd 的构成,就可以很方便的来定制自己想要的消息了。基本思路就是在 /etc/update-motd.d 中创建自己的脚本,如果想要去掉 Debian 默认的版权声明,就干掉 /etc/motd 里的内容。
举个🌰:
sudo -i # 先切换成 root 用户
cd /etc/update-motd.d
touch 00-banner # 创建一个脚本,数字越小消息越靠前
chmod +x 00-banner # 赋予可执行权限

用 vim 00-banner 编辑它,填入以下内容:
#!/bin/sh
echo "Hello World"
echo "This is a motd message!"

注销重新登录,你就得到了一个最简单的文本消息。
但是,仅仅这样显然是不够好看的,那咱们就来整点字符画。
来点字符画:使用 toilet 生成字符画
咱也不知道为啥这工具叫「马桶」🚽
可以用 toiletfiglet 来比较方便的生成字符画,还可以添加颜色和一些效果,例如下图:
001.jpg
安装这两个工具,然后就可以使用了:
sudo apt-get install toilet figlet
toilet "Hello World"

toilet 可以使用 -f 来指定字体,使用 -F 来指定样式。 所有可用的字体可以用 figlist 来查看,可用的样式可以用 toilet -F list 来查看。例如: -F matal 可以添加金属色效果,-F gay 可以添加彩虹效果,-F border 可以添加一个边框。
下面行脚本可以输出所有字体的预览,帮你快速选择一个字体:
for font in banner big block bubble digital ivrit lean mini mnemonic script shadow slant small smscript smshadow smslant standard term; do echo "Font: $font"; toilet -f $font "Hello World"; done

(如果提示error: could not load font big是说明没有这个字体)可在ls /usr/share/figlet/ 查看你拥有的字体。
确定好样式之后,像上面一样,创建一个脚本,然后把命令填进去,例如:
#!/bin/sh
toilet -F gay XueWu

生成固定字符画
toilet 好用是好用,就是可用的字体比较少,如果想要更多更多的样式,可以用 这个网站 来自己生成字符画,可选的字体非常多,可以点击 Test All 来测试所有的字体。
002.jpg
复制生成的字符画,再像上文一样创建一个脚本,把内容填进去,并用单引号包裹起来,在最前面加上 echo 命令,比如:
#!/bin/sh
echo '  _____   ____  ____  ____  _____  ____  ____  '
echo ' \   \/  /__ __   ____/  \    /  \__ __                   '
echo '  \     /|  |  \_/ __ \   \/\/   /  |  \                  '
echo '  /     \|  |  /\  ___/\        /|  |  /                  '
echo ' /___/\  \____/  \___  >\__/\  / |____/                   '
echo '       \_/           \/      \/                           '
echo '                                               '         

就得到了自己想要的字符画了。注意,有些特殊字符是需要转义的,比如我上面的 '\'',就是为了显示 ' 字符。 当然如果觉得比较麻烦,也可以直接创建一个普通的文本文件,把字符画原封不动的填进去,然后在脚本里用 cat 路径 去直接显示文本内容,是一个蛮不错的选择。
给点颜色看看
如果觉得黑底白字太单调了,那就整点颜色看看。下面的示例脚本显示了一个橙色的字符画:
#!/bin/sh
normal='\e[37m'
color='\e[38;5;202m'
printf "${color}"
echo '  _____   ____  ____  ____  _____  ____  ____  '
echo ' \   \/  /__ __   ____/  \    /  \__ __                   '
echo '  \     /|  |  \_/ __ \   \/\/   /  |  \                  '
echo '  /     \|  |  /\  ___/\        /|  |  /                  '
echo ' /___/\  \____/  \___  >\__/\  / |____/                   '
echo '       \_/           \/      \/                           '
echo '                                               '          
printf "${normal}"

终端可以用 ANSI 颜色代码来给改变颜色,现代终端一般至少支持 xterm-256color 也就是 256 色。当谈到终端中的颜色时,前景色指的是字符的颜色,而背景色则是字符后面的颜色。
在上面的脚本中,为了设置前景色,咱使用了 \e[38;5;色号m 这样的格式,其中 色号 是指特定的颜色代码。例如,\e[38;5;202m 就是设置前景色为橙色。同样,背景色的设置则使用 \e[48;5;色号m 的格式。例如,要将背景色设置为浅蓝色(色号 117),可以使用 \e[48;5;117m
具体的颜色代码可以在 256 Colors - Cheat Sheet - Xterm, HEX, RGB, HSL | DITig 这个网站查看,它提供了一个完整的 256 色 ANSI 颜色代码表, Xterm Number 就是我们要找的色号。
打印完特殊颜色的字符串,记得用 ${normal} 来恢复默认的白色,不然就全都是彩色的了。
抄作业?
原理介绍完了,大家已经可以动手定制自己的 motd 消息了。文章开头是我设置的登录消息,除了固定的字符串,还打印了系统的一些基本消息,下面可以直接抄作业~
创建 00-banner 和修改 10-uname,然后填入以下内容,用 chmod +x 00-banner 添加可执行权限,并干掉系统默认的脚本和 /etc/motd 里的内容,重新登录就得到了本文头图的登录消息了~
00-banner 脚本:
#!/bin/sh
toilet -f ascii12 -F gay -F border -W Xuewu

10-uname 脚本:
#!/bin/bash

# 颜色定义
RED='\033[31m'
BOLD='\033[1m'
ITALIC='\033[3m'
NORMAL='\033[0m'

# 获取信息
OS_INFO=$(echo "$(lsb_release -d | cut -f2) $(uname -m)")
KERNEL=$(uname -r)
HOSTNAME=$(uname -n)
USERNAME=$(whoami)  # 当前用户
UPTIME=$(uptime -p)
LOAD=$(cat /proc/loadavg | awk '{print $1" "$2" "$3}')
MEMORY=$(free -m | awk '/Mem:/ {print $3" MiB / "$2" MiB"}')
DATETIME=$(date "+%Y-%m-%d %H:%M:%S")

# 定义信息内容
titles=("OS" "Kernel" "Hostname" "Current User" "Uptime" "Load Average" "Memory Usage" "Date & Time")
contents=("$OS_INFO" "$KERNEL" "$HOSTNAME" "$USERNAME" "$UPTIME" "$LOAD" "$MEMORY" "$DATETIME")

# 打印信息
if command -v toilet >/dev/null 2>&1; then
    toilet -f term -F metal -- "---------------------------------------------"
fi
echo -e " ${BOLD}${ITALIC}System Information:${NORMAL}"
for i in ${!titles[@]}; do
    printf " ${RED}${ITALIC}${BOLD}  %-15s:${NORMAL} %s\n" "${titles[$i]}" "${contents[$i]}"
done
if command -v toilet >/dev/null 2>&1; then
    toilet -f term -F metal -- "---------------------------------------------"
fi

如果觉得自己写的代码不漂亮,可以用现成neofetch工具
111.jpg
#!/bin/sh
toilet -f ascii12 -F gay -F border -W XuewuPVE
neofetch

原作者
楼主
Waylee 楼主

主题

0

回帖

1万

积分

仙帝

积分
10124
Waylee 2024-9-5 17:18 | 显示全部楼层
PVE系统的话,默认会显示debian,手动判断一下系统版本:
#!/bin/bash

# 颜色定义
RED='\033[31m'
BOLD='\033[1m'
ITALIC='\033[3m'
NORMAL='\033[0m'

# 获取信息
# 获取 Proxmox VE 版本号
PROXMOX_VERSION=$(pveversion | awk -F'[ /]' '{print $2}')
OS_INFO="Proxmox VE $PROXMOX_VERSION"
KERNEL=$(uname -r)
HOSTNAME=$(uname -n)
USERNAME=$(whoami)  # 当前用户
UPTIME=$(uptime -p)
LOAD=$(cat /proc/loadavg | awk '{print $1" "$2" "$3}')
MEMORY=$(free -m | awk '/Mem:/ {print $3" MiB / "$2" MiB"}')
DATETIME=$(date "+%Y-%m-%d %H:%M:%S")

# 定义信息内容
titles=("OS" "Kernel" "Hostname" "Current User" "Uptime" "Load Average" "Memory Usage" "Date & Time")
contents=("$OS_INFO" "$KERNEL" "$HOSTNAME" "$USERNAME" "$UPTIME" "$LOAD" "$MEMORY" "$DATETIME")

# 打印信息
if command -v toilet >/dev/null 2>&1; then
    toilet -f term -F metal -- "---------------------------------------------"
fi
echo -e " ${BOLD}${ITALIC}System Information:${NORMAL}"
for i in ${!titles[@]}; do
    printf " ${RED}${ITALIC}${BOLD}  %-15s:${NORMAL} %s\n" "${titles[$i]}" "${contents[$i]}"
done
if command -v toilet >/dev/null 2>&1; then
    toilet -f term -F metal -- "---------------------------------------------"
fi
您需要登录后才可以回帖 登录 | register

本版积分规则

雪舞知识库 | 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 |网站地图|天天打卡

GMT+8, 2024-12-5 03:04 , Processed in 0.086616 second(s), 9 queries , Redis On.

Powered by XueWu Licensed

Copyright © Tencent Cloud.

快速回复 返回顶部 返回列表