如何通过 bash 脚本阅读我的 ssh 警告横幅
how to read my ssh warning banner via bash script
#!/bin/bash
if read -ra banner < <(LANG=C sshd -T | grep banner 2>/dev/null)
then
printf "$banner"
else
printf 'banner not set\n'
fi
如何修复我的 bash 脚本以读取我的 ssh 警告横幅。 bash 脚本编写的新手,不确定我做错了什么
为了获得好的答案,最好描述您看到的输出或行为,以及您期望的输出。
我发现您的代码段有两处错误:
sshd -T
在未设置横幅时打印 banner none
,因此您的 grep 仍将 return 一行,使 if 毫无意义
- 您要求横幅是一个带有
read -a
的数组,但在打印时只访问第一个元素
您可以像这样修复您的代码
if read -ra banner < <(LANG=C sshd -T | grep banner | grep -v "^banner none$"); then
printf "${banner[@]:1}"
else
printf 'banner not set\n'
fi
我喜欢不同的风格,可能是
shopt -s lastpipe
LANG=C sshd -T | grep ^banner\ | read -r banner
if test "$banner" != "banner none"; then
echo "${banner#* }"
else
echo "banner not set"
fi
#!/bin/bash
if read -ra banner < <(LANG=C sshd -T | grep banner 2>/dev/null)
then
printf "$banner"
else
printf 'banner not set\n'
fi
如何修复我的 bash 脚本以读取我的 ssh 警告横幅。 bash 脚本编写的新手,不确定我做错了什么
为了获得好的答案,最好描述您看到的输出或行为,以及您期望的输出。
我发现您的代码段有两处错误:
sshd -T
在未设置横幅时打印banner none
,因此您的 grep 仍将 return 一行,使 if 毫无意义- 您要求横幅是一个带有
read -a
的数组,但在打印时只访问第一个元素
您可以像这样修复您的代码
if read -ra banner < <(LANG=C sshd -T | grep banner | grep -v "^banner none$"); then
printf "${banner[@]:1}"
else
printf 'banner not set\n'
fi
我喜欢不同的风格,可能是
shopt -s lastpipe
LANG=C sshd -T | grep ^banner\ | read -r banner
if test "$banner" != "banner none"; then
echo "${banner#* }"
else
echo "banner not set"
fi