目录
Linux 系统 SSH 服务的安装与连接指南(含查看 IP 多种方法)
本文记录在一台 Linux 服务器上安装并启动 SSH 服务端、确认服务器 IP、以及从客户端连上去的完整做法。覆盖 Ubuntu / Debian / CentOS / RHEL / Rocky 等常见发行版,命令均经实测可照抄。
经验之谈:连不上服务器,90% 的问题出在三处——IP 不对、sshd 没起来、防火墙没放。把这三点确认好,基本都能通。
本文在通用做法基础上,融合了知识库「Linux运维」中多篇实战文章的要点(安装 ssh 服务、新装 CentOS 无 IP 的网络配置、sshd.service 排错、ip/ifconfig/Netplan 网络速查),参考资料见文末。
一、先确认服务器 IP(多种查看方法)
客户端要连服务器,第一步就是知道服务器的地址。下面这些方法,挑一个顺手的就行。
方法 1:ip addr(最推荐,所有现代发行版自带)
baship addr
# 或简写
ip a
输出里每个网卡(如 eth0、ens33、lo)下面找 inet 行,那就是 IPv4 地址。lo 是回环地址 127.0.0.1,忽略它。
只看 IPv4、更干净:
baship -4 addr show
# 只看某个网卡
ip addr show eth0
方法 2:hostname -I(最省事,一行列出所有 IP)
bashhostname -I
# 输出示例:192.168.1.10 10.0.0.5
一条命令直接打印本机所有非回环 IPv4,适合写脚本或快速确认。
方法 3:ifconfig(老工具,需装 net-tools)
bashifconfig # 看全部
ifconfig eth0 # 看指定网卡
新系统默认不带,需要 sudo apt install net-tools 或 sudo yum install net-tools。能不用就别用,方法 1 更标准。
方法 4:nmcli(用 NetworkManager 的发行版,如 CentOS/RHEL/桌面版 Ubuntu)
bashnmcli connection show # 看连接
nmcli device status # 看设备与 IP 概况
方法 5:通过默认路由反查(顺手确认网关)
baship route # 看路由表,default via 后面是网关
ip route get 1.1.1.1 # 模拟访问外网,返回出网网卡与源 IP
方法 6:查公网 IP(云服务器 / 有外网时)
上面查到的多半是内网 IP(如 192.168.x.x、10.x.x.x、172.16.x.x)。从家里或公司连云服务器,要的是公网 IP:
bashcurl ifconfig.me
# 或
curl icanhazip.com
区分一下:内网 IP 只能在同一个局域网内互访;公网 IP 才能从任意地方连。云服务器还要在厂商控制台的安全组里放行 22 端口(见第三节)。
坑:新装的 CentOS 没 IP 怎么办
新系统网卡经常默认没配 IP(ip a 看到 ens33 却没有 inet 行)。以 CentOS 7 为例,编辑网卡配置文件:
bash# 先看网卡名
ip a
# 编辑对应网卡配置(CentOS 7 路径)
vi /etc/sysconfig/network-scripts/ifcfg-ens33
改成静态 IP(按你局域网规划填):
iniBOOTPROTO=static # 静态 IP(dhcp 为自动获取)
ONBOOT=yes # 开机启用该网卡
IPADDR=192.168.47.10 # 与子网同网段
NETMASK=255.255.255.0
GATEWAY=192.168.47.2
DNS1=223.5.5.5
DNS2=8.8.8.8
bashsystemctl restart network # 重启网络使配置生效
ip a # 再看,inet 行应该出来了
CentOS 8+ / Rocky / Ubuntu 18.04+ 改用 Netplan 或
nmcli配静态 IP(见第五节),不再改network-scripts。
二、安装并启动 SSH 服务端(按发行版)
OpenSSH 的服务端包叫 openssh-server。不同发行版的包管理器不同,但装完启动的逻辑一致。
Ubuntu / Debian(apt)
bashsudo apt update
sudo apt install -y openssh-server
# 启动并设置开机自启
sudo systemctl enable --now ssh
# 确认进程在跑
ps aux | grep sshd
# 确认在监听 22 端口
sudo ss -tlnp | grep :22
注意:Debian 系的服务名是
ssh,不是sshd。所以命令是systemctl start ssh。
CentOS / RHEL 7(yum)
bashsudo yum install -y openssh-server
sudo systemctl enable --now sshd
sudo ss -tlnp | grep :22
CentOS / RHEL 8+ / Rocky / Alma(dnf)
bashsudo dnf install -y openssh-server
sudo systemctl enable --now sshd
sudo ss -tlnp | grep :22
先确认装了没有(排错常用)
bash# Debian/Ubuntu
dpkg -l | grep openssh-server
# CentOS/RHEL
rpm -qa | grep openssh-server
关于服务名:ssh 还是 sshd
遇到 Unit sshd.service not found 别慌,往往是服务名不对:
bash# Debian/Ubuntu 用 ssh.service
sudo systemctl restart ssh
# CentOS/RHEL 用 sshd.service
sudo systemctl restart sshd
# 不确定就列出来看
ls /usr/lib/systemd/system/ | grep ssh
如果列出来是 ssh.service,就用 ssh;是 sshd.service 就用 sshd。极少老系统不是 systemd 管的,用 ps -p 1 -o comm= 看 init 类型,非 systemd 就用 service sshd restart。
三、放行防火墙
sshd 起来了,但防火墙挡着照样连不上。按发行版放行 22 端口。
ufw(Ubuntu / Debian 常用)
bashsudo ufw allow 22/tcp sudo ufw reload sudo ufw status
firewalld(CentOS / RHEL / Rocky)
bashsudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --reload sudo firewall-cmd --list-all
云服务器:安全组别忘了
如果是云上的服务器(阿里云/腾讯云/AWS 等),系统防火墙放行还不够,还得在云控制台的安全组里加一条「允许 TCP 22」的规则,来源按需设为指定 IP 或 0.0.0.0/0。这一步漏了,从外网一样连不上。
四、从客户端连接
服务端就绪后,在另一台机器(Linux / macOS / Windows 的 PowerShell)上连:
bashssh 用户名@服务器IP
ssh -p 2222 用户名@服务器IP # 改了端口就加 -p
首次连接会提示确认主机指纹,输入 yes 即可(指纹校验细节见《使用公钥连接 SSH》一文)。输入密码就能登录。
推荐做法:用公钥免密登录,比密码更安全也更方便。生成密钥、上传公钥、配置别名的完整步骤,见同工作区的 ssh-public-key-guide.md,本文不再重复。
服务端侧随时验证是否在监听:
bashsudo ss -tlnp | grep :22
# 没输出 = 没监听,回头检查第二节的安装启动
五、进阶:配置静态 IP(各发行版差异)
服务器一般建议用静态 IP,避免重启后地址变了连不上。
CentOS 7:network-scripts(见第一节的坑)
修改 /etc/sysconfig/network-scripts/ifcfg-<网卡>,BOOTPROTO=static + ONBOOT=yes,再 systemctl restart network。
CentOS 8+ / Rocky / Alma:nmcli 或 network-scripts 已弃用
用 nmcli 改:
bashsudo nmcli connection modify <连接名> ipv4.method manual ipv4.addresses 192.168.1.200/24 ipv4.gateway 192.168.1.1 ipv4.dns 223.5.5.5 sudo nmcli connection up <连接名>
Ubuntu 18.04+:Netplan(/etc/netplan/*.yaml)
bashsudo vi /etc/netplan/00-installer-config.yaml
yamlnetwork:
ethernets:
eth0:
dhcp4: no
addresses: [192.168.1.200/24]
gateway4: 192.168.1.1
nameservers:
addresses: [223.5.5.5, 8.8.8.8]
version: 2
bashsudo netplan apply
临时生效(重启丢失,仅测试用)
bashsudo ip addr add 192.168.1.100/24 dev eth0
sudo ip link set eth0 up
六、排错速查
| 现象 | 可能原因 | 处理 |
|---|---|---|
Could not resolve hostname | IP/域名写错 | ip a 重新确认服务器地址 |
Connection refused | sshd 没启动 / 端口不对 | systemctl status ssh(或 sshd);ss -tlnp | grep :22 |
Connection timeout / No route to host | 网络不通 / 防火墙 / 安全组 | 检查 ufw/firewalld、云安全组、能否 ping 通 |
Unit sshd.service not found | 服务名应为 ssh(Debian 系) | ls /usr/lib/systemd/system/ | grep ssh 确认后用 ssh |
| 内网能连、外网连不上 | 缺路由器端口转发 / 云安全组 | 在路由器或云控制台放行 22 |
| 新装系统没 IP | 网卡未配置 | 见第一节「新装 CentOS 没 IP」 |
| 改配置后起不来 | sshd_config 写错 | 先 sudo sshd -t 校验语法再重启 |
定位思路:先看 IP 对不对(第一节)→ 再看 sshd 起没起(systemctl status + ss -tlnp)→ 再看防火墙/安全组(第三节)→ 最后看 sshd 配置。日志在 /var/log/auth.log 或 /var/log/secure,连不上时 tail 一下往往直接看到原因。
七、小结与参考资料
小结:让一台 Linux 能被 SSH 连上,核心就三步——确认 IP(第一节多种方法)、装好并启动 sshd(第二节各发行版命令,注意 Debian 系叫 ssh、RHEL 系叫 sshd)、放行防火墙与安全组(第三节)。新装系统常卡在「网卡没 IP」和「服务名写错」,按本文排错表逐一对照即可。连上后建议改用公钥登录(见 ssh-public-key-guide.md)并关闭密码登录,安全和便利都到位。
参考资料(知识库「Linux运维」):
- 《新买的 linux 服务器 - 安装 ssh 服务并讲解含义》(码途行者)
- 《IT 技能提升 - 新安装的 CentOS 系统没有 IP,要怎么进行网络配置》(科技小白说科技)
- 《Linux 系统下解决 Unit sshd.service not found 和允许 Root 远程 SSH 登录的问题》(码农 DevNote)
- 《Linux 网络管理速查:ip/ifconfig/Netplan 配置指南》(mickeylan)
- 公钥登录详见同工作区
ssh-public-key-guide.md
ai协作,人工编辑