如何对不同的 SSH 连接使用不同的 SSH 横幅?

如何对不同的 SSH 连接使用不同的 SSH 横幅?

关于/etc/ssh/sshd_config 在以下范围内指定Banner /etc/issue

由于只有在输入 SSH 登录值后才会显示 SSH 横幅,

是否可以根据 SSH 登录输入的用户名显示不同的(唯一的)横幅?

或者是否可以根据连接的 IP 地址使用特定的横幅?

RHEL/CentOS 7.8 中使用的 SSH 版本是否可以实现其中任何一个?

答案1

好吧,如果您的意思是为每个用户或通过 ssh 连接的 IP 地址显示不同的横幅,您可以选择这两个如下使用Match命令;

  1. 根据用户名不同的横幅:

    # put in Match section like
    Match User sshUser
        Banner /path/to/specific_banner
    
  2. 基于 IP 地址的不同横幅:

    # put in Match section like
    Match Address 10.20.30.0/24
        Banner /path/to/specific_banner
    

所以,这是可能的;您只需要重新加载即可sshd使更改生效;如果您的 sshd 版本没有重新加载命令(在最坏的情况下),您将需要重新启动它。

答案2

另一种可能性是(至少从我的角度来看)为sshing 定义一些函数,该函数将在实际进入ssh会话之前打印一些横幅。如果你需要的话,就发挥创意吧。


示例函数:

unalias ssh 2> /dev/null
ssh ()
{
    if ! { [ $# -eq 2 ] && [ -n "$1" ] && [ -n "$2" ]; } then
        # shellcheck disable=SC2016
        printf >&2 '%s\n' 'Expecting $1 = username, $2 = computer'
        return 1
    fi

    case "$1" in
        (user1) banner='This will be great SSH!' ;;
        (user2) banner='Enjoy your SSH session!' ;;
        (*)     banner='Some generic banner ...' ;;
    esac

    printf '%s\n' \
        "Entering SSH session as user $1 onto computer $2 ..." \
        "$banner"

    command ssh "$1"@"$2"
}

调用示例:

ssh root 192.168.0.1

输出示例:

Entering SSH session as user root onto computer 192.168.0.1 ...
Some generic banner ...


BusyBox v1.30.1 () built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt 19.07.3, r11063-85e04e9f46
 -----------------------------------------------------

相关内容