最近准备面试的时候,有相关linux的面试,把 Linux 的远程连接和网络配置又重新梳理了一遍。很多东西以前用过,但时间一久就容易忘,尤其是网络这块,一旦出问题就很浪费时间。
一、关于远程连接(SSH)
Linux 的远程连接本质上就是用 SSH。平时用它最多的场景就是:
连服务器
连开发板(比如树莓派、嵌入式Linux板子)
在本地电脑上操作远程设备
1. 服务端需要做的事情
一台机器能不能被远程连接,关键在于 SSH 服务有没有开。
一般在 Ubuntu 上直接装:
sudo apt updatesudo apt install openssh-server
装完之后,基本就已经在跑了,但我习惯手动确认一下:
sudo systemctl status ssh
如果没启动就手动起一下:
顺手设成开机自启:
sudo systemctl enable ssh
2. 找到设备的IP地址
远程连接本质上还是网络通信,所以必须先知道对方的 IP。
一般看 inet 后面的地址,比如:
192.168.1.100
这个就是局域网里的地址。
3. 客户端连接
在自己电脑上直接:
ssh 用户名@IP地址
例如:
ssh root@192.168.1.100
第一次连接会提示是否信任,输入 yes,再输密码就能进去了。
4. 一些经常踩的坑
连接不上时,基本按这个顺序排:
SSH 服务有没有装
服务有没有启动
IP 地址是不是对的
两台设备是不是在同一个网段
防火墙有没有拦
防火墙如果有,可以简单放行一下:
二、关于SSH的一点进阶配置
用久了之后,会做两个优化:改端口、免密登录。
1. 改端口
默认 22 端口其实不太安全,改掉会好一点。
配置文件:
sudo nano /etc/ssh/sshd_config
把:
改成:
然后重启:
sudo systemctl restart ssh
之后连接要带端口:
2. 免密码登录
这个在开发中非常有用,特别是频繁连接设备的时候。
在本机生成密钥:
然后把公钥拷过去:
之后再连,就不用输密码了。
三、网络配置这块的整理
相比 SSH,网络配置更容易出问题,而且很多问题都不太直观。
1. 查看当前网络状态
一个看 IP,一个看路由。
2. DHCP(自动获取IP)
大多数系统默认都是 DHCP,也就是自动分配 IP。
如果网络异常,有时候可以手动重新获取:
sudo dhclient
3. 配置静态IP
这个在开发板上用得很多,比如需要固定 IP 才方便连接。
Ubuntu 现在用的是 netplan:
sudo nano /etc/netplan/00-installer-config.yaml
一个常见配置大概是这样:
network: version: 2 ethernets: eth0: dhcp4: no addresses: - 192.168.1.100/24 gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 114.114.114.114]
改完之后应用:
sudo netplan apply
4. DNS问题
有时候能 ping 通 IP,但访问不了域名,多半是 DNS 问题。
可以看一下:
不对的话可以改:
sudo nano /etc/resolv.conf
加一行:
5. 测试网络是否正常
最简单就是:
如果 IP 能通但域名不通,基本就是 DNS。
四、开发中常见的一种场景
PC 和开发板直连,这种情况我碰到很多次。
一般做法是:
两边手动配成同一网段,比如:
然后就可以直接 SSH 连。
五、一些比较典型的问题
用下来发现,大部分问题其实都集中在这几个点:
IP 不在同一个网段
SSH 没开
防火墙拦截
网线或交换机问题
网关配置错误