在Linux系统中,用命令行设置网络连接并连上服务器,核心就两句话:改网络配置用nmcli或ip命令,连远程服务器用ssh命令。前者负责把本机网络调通,后者负责把会话送到目标机器上,下面按使用场景拆开讲,每个步骤都给出可直接敲进终端的命令。
先用ip命令查清当前网络状态
动手改配置之前,先要知道机器现在是什么状态,在终端里敲:
ip addr show
这个命令会列出所有网卡信息,包括接口名(比如eth0、ens33)、MAC地址、IPv4地址、状态标志,重点看带UP或LOWER_UP的接口,说明网线或无线已经物理接通,如果你想看路由和网关,再来一条:
ip route show
默认路由一般长这样:default via 192.168.1.1 dev eth0,其中192.168.1.1就是网关地址,这两条命令是一切网络排查的起点,记牢它们比背一堆配置参数更有用。
临时改IP:适用于测试场景的一次性配置
临时改IP不需要重启网络服务,命令敲完立即生效,但重启后就丢了,适合调试和测试,先分配IP:
sudo ip addr add 192.168.1.100/24 dev eth0
然后删除旧地址(如果存在的话):
sudo ip addr del 192.168.1.90/24 dev eth0
设置默认网关:
sudo ip route add default via 192.168.1.1
有一类场景是改DNS,临时切换DNS源可以用:
echo "nameserver 223.5.5.5" | sudo tee /etc/resolv.conf
这里用的是阿里公共DNS,你也可以换成114.114.114.114或8.8.8.8,注意,/etc/resolv.conf在多数现代发行版里是由systemd-resolved或NetworkManager动态管理的,手动改完可能被覆盖,后面讲永久配置时细说。
上述命令的特点是快,但不上持久化,适合验证某个IP是否可用、测试网段通不通这类临时任务。
永久配置IP地址和DNS:系统重启也不丢
永久配置要区分发行版家族,因为底层机制不一样,主流Linux分两大派:Debian系(Ubuntu、Debian本身)和RHEL系(CentOS、Rocky、AlmaLinux、Fedora)。
在RHEL系上用nmcli搞定一切
nmcli是NetworkManager的命令行客户端,几乎所有的RHEL系都预装了它,它的好处是配置是持久的,而且语法统一。
先查看当前连接名:
nmcli connection show
输出里会有一个NAME列,一般是System eth0或者ens160之类,然后修改IP方式为手动:
sudo nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1
加DNS:
sudo nmcli connection modify eth0 ipv4.dns "223.5.5.5 8.8.8.8"
最后重启这个连接:
sudo nmcli connection down eth0 && sudo nmcli connection up eth0
这套操作不需要改任何配置文件,全部写入NetworkManager的内部存储中,重启依然有效。
在Debian系上编辑interfaces文件
Ubuntu服务器版虽然也有NetworkManager,但更传统的路径是直接改/etc/network/interfaces,用编辑器打开:
sudo vim /etc/network/interfaces
写入静态IP配置:
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 223.5.5.5 8.8.8.8
保存退出后重启网络服务:
sudo systemctl restart networking
注意,新版Ubuntu(18.04之后)推荐使用netplan,它的配置文件在/etc/netplan/目录下,以YAML格式写成,使用sudo netplan apply生效,如果看到这个目录存在,优先用netplan而非interfaces文件,因为两者同时存在时可能会互相冲突。
行业共识认为,生产环境服务器上优先使用发行版默认的网络管理工具,手动改底层配置文件的方式虽然直观,但容易被工具的自动回写覆盖,排查起来费时。
多网卡场景下的路由策略配置
服务器常有多块网卡,这时只配IP还不够,必须给路由做策略,假设机器有eth0(连接内网)和eth1(连接外网),你希望默认流量走eth1,内网流量走eth0。
先分别配置两个接口的IP和网关,然后删除默认路由,再添加策略路由:
sudo ip route del default
sudo ip route add default via 192.168.2.1 dev eth1
sudo ip route add 10.0.0.0/8 via 192.168.1.1 dev eth0
用ip rule查看路由优先级:
sudo ip rule add from 192.168.1.100 table 100 priority 100
sudo ip route add default via 192.168.1.1 dev eth0 table 100
这里引入了路由表的概念,简单理解,就是从特定IP(内网网卡地址)进来的流量,强制走table 100这张独立路由表,如果你在云服务器上配多网卡,这个做法的必要性更高,因为云环境会有默认路由的干扰。
linux命令行连接远程服务器命令详解
网络配置完毕,接下来的重点就是用ssh命令连到远程服务器服务器,最基础的连接方式:
ssh username@192.168.1.200
首次连接会提示确认指纹,输入yes回车,再输密码就能登录,端口不是默认22时,用-p指定:
ssh -p 2222 username@192.168.1.200
如果你经常连同一台机器,建议配置免密登录,在本地生成密钥对:
ssh-keygen -t ed25519 -C "your_comment"
一路回车生成完,把公钥传到服务器上:
ssh-copy-id username@192.168.1.200
之后登录就不需要输密码了,还能顺便提升安全性,因为密码登录可以被暴力破解,密钥登录基本无法被试探,业内专家指出,正确配置的密钥认证能挡住较大比例的自动化扫描攻击,如果想更严密,把服务器上的密码登录关掉:
sudo sed -i 's/^PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart sshd
第一次在使用ssh连接远程服务器命令时加-v参数,能打印排错日志,遇到连接超时、拒绝认证时非常有用:
ssh -v username@192.168.1.200
文件传输与远程操作不走弯路
连上服务器之后,传文件是高频需求,scp命令直接基于ssh通道:
scp /local/path/file.txt username@192.168.1.200:/remote/path/
反过来下载:
scp username@192.168.1.200:/remote/path/file.txt ./local/
目录加-r即可。
如果不喜欢scp的语法,rsync更强大,支持断点续传和增量同步:
rsync -avz -e ssh ./localdir/ username@192.168.1.200:/remote/dir/
注意rsync末尾的斜杠含义:带斜杠表示同步目录内容,不带斜杠会多创建一个层级。
需要批量执行命令时,直接ssh后面接引号:
ssh username@192.168.1.200 "df -h && free -m"
这个用法在批量巡检服务器时有奇效,配合for循环,几十台机器一条命令扫完:
for host in server01 server02 server03; do ssh user@$host "uptime"; done
网络连通性排查:从命令输出看懂问题在哪
配置完网络、连不上目标时,按三个层级排查,每层都有对应命令。
第一层,链路通不通。 ping命令测目标是否响应,但这个报错不一定是对方关机,也可能是防火墙禁了ICMP:
ping -c 4 192.168.1.200
第二层,路由怎么走。 traceroute能看到每一跳的延迟与丢包,定位卡在哪段:
sudo traceroute -T -p 22 192.168.1.200
-T -p 22用TCP方式探测,比默认的UDP探测更容易穿透防火墙。
第三层,端口是否开放。 推荐ss或nc检验:
nc -vz 192.168.1.200 22
返回Connected说明端口可达,否则要检查服务状态和防火墙规则。
查看本机监听端口:
ss -tlnp
看到22端口处于LISTEN状态,说明sshd在跑,如果前面免密登录不生效,先看这个输出确认服务正常。
防火墙层面的检查同样重要,否则所有网络配置都对,但流量被本机或云安全组挡掉:
sudo firewall-cmd --list-all --zone=public
那基于云服务器时,还要到控制台确认安全组规则,这是个容易忽略的卡点,多数云平台的安全组默认只放行22端口,其他端口需要单独添加放行规则。
常见问题快速排查
为什么linux命令行配置了IP却ping不通外网?
先确认默认路由,再看DNS,最后检查防火墙,命令顺手敲一遍:ip route show | grep default查网关,cat /etc/resolv.conf查DNS,ping -c 2 223.5.5.5测公网链路,多数情况下是网关写错或DNS配置没生效,而不是物理链路断了。
修改了配置文件为什么重启后失效?
两个原因最常见,一是没区分临时命令和永久配置,用了ip addr add这种即时生效命令但没有同步到配置文件,二是工具冲突,比如手工改了/etc/network/interfaces,但NetworkManager仍在接管这个接口,服务一重启配置就被覆盖,解决办法是统一使用nmcli或netplan管理,不要再混用。
免密登录配置好了还是要求输密码,怎么办?
按三步查:检查本机公钥是否在服务器的~/.ssh/authorized_keys中,格式是否正确;检查服务器上的sshd配置是否开启PubkeyAuthentication yes;最后看~/.ssh目录的权限,属主必须是自己,权限不能超过700,这三点任意一个不对,密钥认证都会静默失败然后退回密码登录。
最后说一句实在话
Linux命令行网络配置是一个需要刻意练习的技能,别光看文章,找个测试机把上面的命令轮流跑一遍,让报错把你虐一遍,比看十篇教程都有效,从ip命令查看状态、nmcli永久配置、ssh远程连接这组组合拳开始,逐步深入,你会发现网络配置并没有想象中复杂,甚至比Windows图形化界面的反复对话框更透明可控毕竟每一个改动你都清清楚楚看得到。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/771075.html

