SSH(Secure Shell)是Linux系统管理员进行远程管理和监控的核心工具。作为SysOps工程师,掌握通过SSH进行系统监控和性能调优的技能至关重要。以下是详细的指南:
# 编辑SSH配置文件
sudo vi /etc/ssh/sshd_config
# 推荐配置
Port 2222 # 修改默认端口
PermitRootLogin no # 禁止root直接登录
PasswordAuthentication no # 禁用密码认证,仅使用密钥
MaxAuthTries 3 # 最大尝试次数
ClientAliveInterval 300 # 客户端活动检查间隔
ClientAliveCountMax 2 # 保持连接的最大数量
AllowUsers sysadmin # 只允许特定用户登录
# 重启SSH服务
sudo systemctl restart sshd
# 本地生成密钥对
ssh-keygen -t ed25519 -C "sysadmin@company"
# 将公钥复制到远程服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub sysadmin@server -p 2222
# 测试无密码登录
ssh -p 2222 sysadmin@server
# 查看CPU使用情况
ssh sysadmin@server "top -b -n 1 | head -n 12"
# 内存使用情况
ssh sysadmin@server "free -h"
# 磁盘空间
ssh sysadmin@server "df -h"
# 网络连接
ssh sysadmin@server "ss -tulnp"
# 综合监控(需要安装)
ssh sysadmin@server "sudo apt install -y htop && htop"
# 将远程服务器的3000端口(如Grafana)映射到本地
ssh -L 3000:localhost:3000 sysadmin@server -N -f
# 将本地Zabbix代理数据转发到监控服务器
ssh -R 10050:localhost:10050 zabbix-server
#!/bin/bash
# monitor_remote.sh
SERVER="sysadmin@server"
PORT="2222"
check_cpu() {
ssh -p $PORT $SERVER "uptime | awk -F'[a-z]:' '{ print \$2 }'"
}
check_mem() {
ssh -p $PORT $SERVER "free -m | awk 'NR==2{printf \"%.2f%%\", \$3*100/\$2 }'"
}
check_disk() {
ssh -p $PORT $SERVER "df -h / | awk 'NR==2{print \$5}'"
}
echo "CPU Load: $(check_cpu)"
echo "Memory Usage: $(check_mem)"
echo "Disk Usage: $(check_disk)"
# 查看系统负载
ssh sysadmin@server "cat /proc/loadavg"
# 识别高CPU进程
ssh sysadmin@server "ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head"
# IO等待分析
ssh sysadmin@server "iostat -x 1 3"
# 网络性能
ssh sysadmin@server "sar -n DEV 1 3"
# 调整进程优先级
ssh sysadmin@server "renice -n 10 -p [pid]"
# 内核参数调优(临时)
ssh sysadmin@server "sudo sysctl -w vm.swappiness=10"
ssh sysadmin@server "sudo sysctl -w net.core.somaxconn=4096"
# 永久保存内核参数
ssh sysadmin@server "echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf"
# 安装perf工具
ssh sysadmin@server "sudo apt install -y linux-tools-common linux-tools-generic"
# CPU性能分析
ssh sysadmin@server "sudo perf top"
# 系统调用跟踪
ssh sysadmin@server "sudo strace -p [pid] -c"
# 对多个服务器执行相同命令
for server in server1 server2 server3; do
ssh sysadmin@$server "sudo apt update && sudo apt upgrade -y"
done
# 使用并行SSH工具(pssh)
pssh -h hosts.txt -l sysadmin -i "hostname && uptime"
#!/bin/bash
# performance_report.sh
SERVERS=("web1" "web2" "db1" "db2")
REPORT_FILE="/tmp/performance_report_$(date +%Y%m%d).log"
echo "Performance Report - $(date)" > $REPORT_FILE
for server in "${SERVERS[@]}"; do
echo -e "\n===== $server =====" >> $REPORT_FILE
ssh sysadmin@$server << 'EOF' >> $REPORT_FILE
echo -e "\nCPU Load:\n$(uptime)"
echo -e "\nMemory:\n$(free -h)"
echo -e "\nDisk:\n$(df -h)"
echo -e "\nTop Processes:\n$(ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head -n 5)"
EOF
done
/var/log/auth.log
)通过以上技术,SysOps工程师可以有效地利用SSH进行远程系统监控和性能调优,同时保持系统的安全性和稳定性。