第一次设置SSH,最稳妥的路径只有一条:先用默认的密码登录上去,然后立刻修改端口、上传公钥开启密钥认证,最后关闭密码登录。 这样做能挡住绝大多数针对云服务器的暴力破解,也顺手解决了公网环境下的基础安全问题。
云服务器怎么开启ssh:拿到机器后先确认三件事
新买的云服务器,默认只暴露了一个IP和一个初始密码,第一次设置SSH,别急着在自己电脑上敲命令,先确认三件事。
确认SSH服务本身在运行
先登录云厂商控制台,找到实例列表,选择网页终端或VNC登录,这相当于坐在服务器前面操作,后续即使SSH配置出错,这个入口也能兜底。
进去后执行:
- systemctl status sshd
如果提示服务不存在,先安装,Debian/Ubuntu系统执行apt install openssh-server,CentOS/RHEL系统多数镜像自带,没装的话执行yum install openssh-server。
确认安全组放行了22端口
这是“云服务器怎么开启ssh”问题里最容易踩的坑,很多用户第一次连接失败,不是密码错了,而是云厂商控制台的安全组没放行端口。
操作路径:实例管理 → 更多 → 网络和安全组 → 安全组配置 → 入方向规则 → 添加规则,放行TCP 22端口,来源地址建议填你自己的公网IP,而不是0.0.0.0/0,来源范围越窄,暴露面越小。
本机终端做一次密码登录测试
本地电脑打开终端,Windows 10以上版本自带OpenSSH客户端,直接用PowerShell或Windows Terminal就行;Mac和Linux直接用系统终端。
- ssh root@服务器IP
首次连接会提示确认主机指纹,输入yes回车,然后输入初始密码,登录成功之后,先做基础环境确认:
- 查看系统版本:cat /etc/os-release
- 查看当前用户:whoami
- 修改初始密码:passwd
密码登录只能作为临时手段,接下来配置密钥登录才是正事。
服务器ssh密钥登录怎么设置:从生成密钥到关闭密码登录的完整流程
服务器ssh密钥登录怎么设置,核心就三步:本地生成密钥对,公钥上传到服务器,关闭密码认证,具体操作如下。
本地生成密钥对
在本地终端执行:
- ssh-keygen -t ed25519 -C “你的备注”
-t ed25519指定密钥类型,比传统RSA更短更快,新系统都支持,如果服务器系统比较老,改用ssh-keygen -t rsa -b 4096,生成过程中连续回车,默认保存到~/.ssh/目录。
生成完能看到两个文件:
- id_ed25519:私钥文件,留在本地,千万别泄露
- id_ed25519.pub:公钥文件,要上传到服务器
把公钥上传到服务器
推荐用ssh-copy-id命令,一条搞定:
- ssh-copy-id -i ~/.ssh/id_ed25519.pub root@服务器IP
输入服务器密码后,公钥会自动追加到服务器的~/.ssh/authorized_keys文件里。
如果没有这个命令,手动上传也不难,先在本地查看公钥内容:cat ~/.ssh/id_ed25519.pub,复制整行字符串,然后登录服务器执行:
- mkdir -p ~/.ssh
- echo “粘贴公钥内容” >> ~/.ssh/authorized_keys
- chmod 700 ~/.ssh
- chmod 600 ~/.ssh/authorized_keys
最后一步权限设置很关键,OpenSSH对密钥文件的权限非常敏感,权限过宽会直接拒绝公钥认证。
修改sshd_config配置文件
用密钥能正常登录后,再动配置文件,编辑服务器上的/etc/ssh/sshd_config,找到以下参数并修改:
- PubkeyAuthentication yes
- PasswordAuthentication no
- PermitRootLogin no
PermitRootLogin建议改成no,禁止root直接登录,改之前先去服务器上创建一个普通用户,并加入sudo组:
- useradd -m deploy
- usermod -aG sudo deploy
- passwd deploy
改完先别急着退出当前终端,执行sshd -t检查语法,再执行systemctl reload sshd让配置生效,重新开一个终端窗口,用新用户和密钥登录测试,确认能登录,再关闭原来的终端。
服务器ssh端口修改和安全组配合:改端口前先把防火墙想明白
默认的22端口每天被互联网扫描工具扫成千上万次,改端口能显著降低被爆破的概率,但改之前,得先把防火墙逻辑理清楚。
云厂商安全组和系统防火墙双重拦截
服务器ssh端口修改的常见翻车原因,是只改了sshd_config没放行安全组,云服务器的流量路径是:公网 → 安全组 → 系统防火墙 → SSH服务,任何一层拦截,连接都进不来。
操作顺序必须是:
- 先在云厂商控制台添加新端口入方向规则,比如TCP 22222
- 再改服务器上的sshd_config配置
- 最后处理系统防火墙
CentOS/RHEL用firewalld的话,执行:
- firewall-cmd –permanent –add-port=22222/tcp
- firewall-cmd –reload
Debian/Ubuntu用UFW的话,执行:
- ufw allow 22222/tcp
修改sshd_config并处理SELinux
登录服务器,编辑/etc/ssh/sshd_config,把Port 22改成Port 22222,改了之后必须验证SELinux是否拦截。
CentOS系统默认开启SELinux,非标准端口会被直接拒绝,执行getenforce查看状态,如果是Enforcing,用semanage放行:
- semanage port -a -t ssh_port_t -p tcp 22222
没有semanage命令就安装policycoreutils-python-utils,改完同样执行sshd -t,然后systemctl reload sshd。
最后测试新端口登录:
- ssh -p 22222 deploy@服务器IP
登录成功后,用ss -tlnp | grep ssh确认监听端口,确认没问题再考虑关闭22端口的安全组规则。
| 登录场景 | 命令 |
|---|---|
| 默认22端口 | ssh deploy@服务器IP |
| 自定义端口 | ssh -p 22222 deploy@服务器IP |
服务器ssh连接不上的常见原因:从报错类型到日志排查
服务器ssh连接不上,先看报错类型再动手,能少走很多弯路,不同报错对应不同问题层。
三种典型报错的原因对比
| 报错类型 | 可能原因 | 优先排查步骤 |
|---|---|---|
| 连接超时(Operation timed out) | 安全组未放行、防火墙拦截 | 检查云厂商安全组,检查系统防火墙状态 |
| 连接拒绝(Connection refused) | SSH服务未启动、监听端口错误 | 执行systemctl status sshd,执行ss -tlnp |
| 认证失败(Permission denied) | 密码或密钥错误、文件权限不对 | 检查authorized_keys权限,查看/var/log/secure日志 |
连接超时最常见,十有八九是云厂商控制台的安全组没放行端口,其次才是系统防火墙,客户端telnet IP 端口能快速定位问题出在哪一层。
密钥认证失败的细节排查
密码登录测试正常,但密钥登录报Permission denied,按以下顺序排查:
- 服务器上执行cat ~/.ssh/authorized_keys,确认公钥内容完整
- 确认.ssh目录权限是700,authorized_keys文件权限是600
- 确认服务器家目录权限不是777
- 客户端执行ssh -v -i ~/.ssh/id_ed25519 deploy@服务器IP,观察输出中是否出现Authentication succeeded
服务器端日志记录在/var/log/secure或/var/log/auth.log,里面会给出具体的拒绝原因。
SSH完全不可用时的VNC兜底
SSH服务彻底挂了,别慌,云厂商控制台的网页VNC登录就是最后一扇门,通过VNC进入系统,把改错的配置改回来,执行systemctl restart sshd,基本就能恢复。
这类场景通常是忘记改防火墙、或者SELinux拦截了自定义端口导致的,VNC登录后先把防火墙规则补上,再检查服务状态。
服务器ssh常见问题解答:端口修改、密钥口令与登录方式选择
修改SSH端口后连不上,怎么排查?
先看云厂商安全组是否放行了新端口,再telnet尝试新端口,连接成功说明安全组通,连接失败说明安全组或防火墙拦截,然后登录VNC检查sshd监听端口,执行ss -tlnp | grep ssh看是否监听在新端口上,最后检查SELinux是否拦截,CentOS执行getenforce确认状态。
ssh-keygen生成密钥时,要不要设置口令?
设置口令更安全,私钥文件泄露后,没有口令就无法使用,日常使用可以配合ssh-agent,执行ssh-add将私钥加入代理,只需要首次输入口令,如果服务器需要跑自动化脚本或定时任务,设置口令会影响无人值守场景,此时不设口令也可以,但私钥文件的保存位置和权限一定要严格把控。
已经有密码登录,还有必要配置SSH密钥吗?
有必要,公网服务器每时每刻都在被扫描,统计显示相当一部分被入侵的云服务器,根因就是弱密码加默认22端口,密钥登录在没有私钥文件的情况下几乎无法暴力破解,配合关闭密码登录,服务器被爆破的概率大幅下降,行业共识认为,密钥登录加非标准端口是云服务器SSH加固的基础组合。
第一次设置SSH,核心就三件事:改端口、上密钥、关密码。 这套流程二十分钟之内能走完,但能省掉日后绝大多数安全维护的麻烦。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/795322.html


