在谷歌云平台(GCP)配置 SSH 远程登录指南

在谷歌云平台(GCP)配置 SSH 远程登录指南

目录

1. 创建项目

项目命名建议

  • 生产环境推荐使用:prod-main-2024 或更简单的 prod-v1
  • 命名规则:

    • 必须是唯一的
    • 长度在 6-30 个字符之间
    • 只能包含小写字母、数字和连字符(-)
    • 必须以字母开头

2. 创建虚拟机

虚拟机命名建议

  • 包含地区信息的简单命名:hk-1hk-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 执行配置步骤

  1. 创建脚本:
    vi setup_ssh.sh
  2. 设置执行权限:
    chmod +x setup_ssh.sh
  3. 执行脚本:
    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. 安全建议

  1. 及时修改默认密码
  2. 使用强密码
  3. 定期更新系统
  4. 考虑使用 SSH 密钥而不是密码
  5. 限制 IP 访问范围

7. 防火墙配置

建议的防火墙规则命名:

  • 入站规则:allow-ssh-in
  • 出站规则:allow-all-out

贡献

欢迎提交问题和改进建议。

许可

MIT License

评论区
头像
    头像
    aqqbdvxexc
      

    这篇文章不错!

    头像
    efszkrbrns
      

    场景转换稍显突兀,可增加过渡描写。

文章目录