在谷歌云平台(GCP)配置 SSH 远程登录指南
目录
1. 创建项目
项目命名建议
- 生产环境推荐使用:
prod-main-2024
或更简单的prod-v1
命名规则:
- 必须是唯一的
- 长度在 6-30 个字符之间
- 只能包含小写字母、数字和连字符(-)
- 必须以字母开头
2. 创建虚拟机
虚拟机命名建议
包含地区信息的简单命名:
hk-1
或hk-s1
- hk: 香港地区
- s1: server 1 的简写
命名要点:
- 简短明了
- 便于管理
- 包含必要信息
3. 配置 SSH 访问
3.1 创建配置脚本
创建文件 setup_ssh.sh
:
!/bin/bash
检查是否为root用户
if [ "$EUID" -ne 0 ]; then
echo "请使用 sudo 运行此脚本"
exit 1
fi
设置要修改的密码
NEW_PASSWORD="YourPassword123" # 请修改为您的密码
修改sshd_config中的多个设置
sed -i 's/^#?PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
sed -i 's/^#?PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config
sed -i 's/^#?UsePAM.*/UsePAM yes/' /etc/ssh/sshd_config
sed -i 's/^#?ChallengeResponseAuthentication.*/ChallengeResponseAuthentication yes/' /etc/ssh/sshd_config
确保目录存在
mkdir -p /etc/ssh/sshd_config.d
创建或修改设置文件
cat > /etc/ssh/sshd_config.d/settings.conf << EOF
PasswordAuthentication yes
PermitRootLogin yes
UsePAM yes
ChallengeResponseAuthentication yes
EOF
设置root密码
echo "root:${NEW_PASSWORD}" | chpasswd
重启SSH服务
systemctl restart sshd.service
验证配置
echo "验证SSH配置..."
sshd -t && echo "SSH配置语法正确" || echo "SSH配置有误"
检查服务状态
if systemctl is-active sshd >/dev/null 2>&1; then
echo "SSH服务已成功重启"
else
echo "SSH服务重启失败"
fi
echo "配置完成!"
echo "Root密码已设置为: ${NEW_PASSWORD}"
echo "请尝试使用root账户和密码登录"
3.2 执行配置步骤
- 创建脚本:
vi setup_ssh.sh - 设置执行权限:
chmod +x setup_ssh.sh - 执行脚本:
sudo ./setup_ssh.sh
4. 诊断工具
创建诊断脚本 ssh_diagnostic.sh
:
!/bin/bash
设置颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
检查是否为root用户
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}请使用 sudo 运行此脚本${NC}"
exit 1
fi
echo -e "${YELLOW}开始 SSH 配置诊断...${NC}\n"
1. 检查 SSH 服务状态
echo -e "${YELLOW}1. 检查 SSH 服务状态:${NC}"
if systemctl is-active sshd &>/dev/null; then
echo -e "${GREEN}SSH 服务正在运行${NC}"
else
echo -e "${RED}SSH 服务未运行${NC}"
fi
echo "------------------------"
2. 检查 SSH 配置文件
echo -e "${YELLOW}2. 检查 SSH 配置文件:${NC}"
if [ -f "/etc/ssh/sshd_config" ]; then
echo -e "${GREEN}找到 sshd_config 文件${NC}"
# 检查关键配置
echo -e "\n关键配置检查:"
grep -E "^PermitRootLogin|^PasswordAuthentication|^UsePAM|^ChallengeResponseAuthentication" /etc/ssh/sshd_config
else
echo -e "${RED}未找到 sshd_config 文件${NC}"
fi
echo "------------------------"
3. 检查 settings.conf
echo -e "${YELLOW}3. 检查 settings.conf:${NC}"
if [ -f "/etc/ssh/sshd_config.d/settings.conf" ]; then
echo -e "${GREEN}找到 settings.conf 文件${NC}"
echo "文件内容:"
cat /etc/ssh/sshd_config.d/settings.conf
else
echo -e "${RED}未找到 settings.conf 文件${NC}"
fi
echo "------------------------"
4. 检查防火墙状态
echo -e "${YELLOW}4. 检查防火墙状态:${NC}"
if command -v firewall-cmd >/dev/null 2>&1; then
echo "防火墙规则:"
firewall-cmd --list-all
else
echo -e "${YELLOW}未安装 firewalld${NC}"
fi
echo "------------------------"
5. 检查 SELinux 状态
echo -e "${YELLOW}5. 检查 SELinux 状态:${NC}"
if command -v getenforce >/dev/null 2>&1; then
echo "SELinux 状态: $(getenforce)"
else
echo -e "${YELLOW}SELinux 未安装${NC}"
fi
echo "------------------------"
6. 检查 SSH 端口监听状态
echo -e "${YELLOW}6. 检查 SSH 端口监听状态:${NC}"
if command -v netstat >/dev/null 2>&1; then
netstat -tlpn | grep ssh
elif command -v ss >/dev/null 2>&1; then
ss -tlpn | grep ssh
else
echo -e "${RED}未找到 netstat 或 ss 命令${NC}"
fi
echo "------------------------"
7. 检查最近的 SSH 日志
echo -e "${YELLOW}7. 最近的 SSH 日志:${NC}"
if [ -f "/var/log/secure" ]; then
tail -n 5 /var/log/secure
elif [ -f "/var/log/auth.log" ]; then
tail -n 5 /var/log/auth.log
else
echo -e "${RED}未找到 SSH 日志文件${NC}"
fi
8. 检查系统资源
echo -e "${YELLOW}8. 系统资源状态:${NC}"
echo "CPU 负载:"
uptime
echo "内存使用:"
free -h
echo "磁盘使用:"
df -h
9. 检查网络连接
echo -e "${YELLOW}9. 网络连接状态:${NC}"
echo "当前连接数:"
netstat -an | grep ESTABLISHED | wc -l
echo -e "\n${YELLOW}诊断完成${NC}"
5. 常见问题解决
5.1 无法连接
- 检查防火墙规则
- 验证 SSH 配置
- 确认密码正确
- 检查服务状态
5.2 权限问题
- 确保使用 sudo 运行脚本
- 检查文件权限
- 验证用户权限
5.3 配置文件冲突
- 检查 sshd_config 和 settings.conf 的配置是否一致
- 主配置文件优先级更高
6. 安全建议
- 及时修改默认密码
- 使用强密码
- 定期更新系统
- 考虑使用 SSH 密钥而不是密码
- 限制 IP 访问范围
7. 防火墙配置
建议的防火墙规则命名:
- 入站规则:
allow-ssh-in
- 出站规则:
allow-all-out
贡献
欢迎提交问题和改进建议。
许可
MIT License
这篇文章不错!
场景转换稍显突兀,可增加过渡描写。