脚本功能
- 列出SSH登录成功和失败的记录详细信息
- 提取与本机端口有TCP连接的所有IP、端口号(已断开连接的也算)
- 输入pid查看文件路径
- 查看指定端口TCP连接(多个端口用空格分开)
使用方法
保存为safeCheck.sh 执行sh safeCheck.sh,然后输入序号进行交互
#!/bin/bash
# 功能说明:
# 1. 列出SSH登录成功和失败的记录详细信息
# 2. 提取与本机端口有TCP连接的所有IP、端口号(已断开连接的也算,本地IP除外)
# 3. 输入pid查看文件路径
# 4. 查看指定端口TCP连接(多个端口用空格分开)
# 函数:列出SSH登录成功和失败的记录详细信息
function ssh_login_records() {
echo "列出SSH登录成功记录:"
echo "--------------------------------------"
grep 'Accepted' /var/log/secure | sed -E 's/^([A-Za-z]+)[ ]+([0-9]+) ([0-9:]+)(.*)/\2-\1 \3\4/' | sed 's/Jan/01/;s/Feb/02/;s/Mar/03/;s/Apr/04/;s/May/05/;s/Jun/06/;s/Jul/07/;s/Aug/08/;s/Sep/09/;s/Oct/10/;s/Nov/11/;s/Dec/12/'
echo "--------------------------------------"
echo "列出SSH登录失败记录:"
echo "--------------------------------------"
grep 'Failed' /var/log/secure | sed -E 's/^([A-Za-z]+)[ ]+([0-9]+) ([0-9:]+)(.*)/\2-\1 \3\4/' | sed 's/Jan/01/;s/Feb/02/;s/Mar/03/;s/Apr/04/;s/May/05/;s/Jun/06/;s/Jul/07/;s/Aug/08/;s/Sep/09/;s/Oct/10/;s/Nov/11/;s/Dec/12/'
echo "--------------------------------------"
}
# 函数:提取与本机端口有TCP连接的所有IP和端口号(已断开连接的也算,本地IP除外)
function tcp_connections() {
echo "提取与本机端口有TCP连接的所有IP和端口号(已断开连接的也算,本地IP除外):"
echo "--------------------------------------"
echo -e "远程IP\t\t\t本机IP\t\t\tTCP状态\t\t\t进程"
echo "--------------------------------------------------------------------------------------------------------------"
sudo netstat -tnp | awk 'NR>2 && $4 !~ /::1/ && $4 !~ /^127\.0\.0\.1/ {print $5, $4, $6, $7}' | sed -E 's/::ffff://' | awk '{printf "%-23s %-23s %-23s [%s] %-15s %s\n", $1, $2, $3, $4, $5, $6}'
echo "--------------------------------------"
}
# 函数:输入pid查看文件路径
function process_file_path() {
pid=$1
if [ -d /proc/$pid ]; then
echo "文件路径: $(readlink /proc/$pid/exe)"
else
echo "无效的PID。"
fi
}
function filter_tcp_connections_by_port() {
port=$1
echo "提取与本机端口 $port 有TCP连接的所有IP和端口号(已断开连接的也算,本地IP除外):"
echo "--------------------------------------"
echo -e "远程IP\t\t\t本机IP\t\t\tTCP状态\t\t\t进程"
echo "--------------------------------------------------------------------------------------------------------------"
sudo netstat -tnp | awk -v port="$port" 'NR>2 && $4 !~ /::1/ && $4 !~ /^127\.0\.0\.1/ && $4 ~ ":"port"$" {print $5, $4, $6, $7}' | sed -E 's/::ffff://' | awk '{printf "%-23s %-23s %-23s [%s] %-15s %s\n", $1, $2, $3, $4, $5, $6}'
echo "--------------------------------------"
}
# 函数:查看指定端口TCP连接(多个端口用空格分开,已断开连接的也算,本地IP除外)
function filter_tcp_connections_by_local_ports() {
ports=($1)
echo "提取与本机以下端口有TCP连接的所有IP和端口号(已断开连接的也算,本地IP除外):${ports[@]}"
echo "--------------------------------------"
echo -e "远程IP\t\t\t本机IP\t\t\tTCP状态\t\t\t进程"
echo "--------------------------------------------------------------------------------------------------------------"
for port in "${ports[@]}"; do
sudo netstat -tnp | awk -v port="$port" 'NR>2 && $4 !~ /::1/ && $4 !~ /^127\.0\.0\.1/ && $4 ~ ":"port"$" {print $5, $4, $6, $7}' | sed -E 's/::ffff://' | awk '{printf "%-23s %-23s %-23s [%s] %-15s %s\n", $1, $2, $3, $4, $5, $6}'
done
echo "--------------------------------------"
}
while true; do
echo "请选择要执行的操作:"
echo "1. 列出SSH登录成功和失败的记录详细信息"
echo "2. 提取与本机端口有TCP连接的所有IP、端口号(已断开连接的也算)"
echo "3. 输入pid查看文件路径"
echo "4. 查看指定端口TCP连接(多个端口用空格分开)"
echo "99. 退出"
read -p "请输入选项(1、2、3、4 或 99):" option
case $option in
1)
ssh_login_records
;;
2)
tcp_connections
;;
3)
read -p "请输入进程ID (PID): " pid
process_file_path $pid
;;
4)
read -p "请输入要筛选的端口号(多个端口用空格分开): " input_ports
filter_tcp_connections_by_local_ports "$input_ports"
;;
99)
echo "退出脚本。"
exit 0
;;
*)
echo "无效选项,请输入1、2、3、4 或 99。"
;;
esac
done
本文转载自: https://blog.csdn.net/qq_40704513/article/details/130176019
版权归原作者 运维、开发攻城狮 所有, 如有侵权,请联系我们删除。
版权归原作者 运维、开发攻城狮 所有, 如有侵权,请联系我们删除。