前言

在机器人调试、ROS 开发、服务器维护或多台 Ubuntu 电脑协同时,经常需要从一台电脑登录另一台电脑执行命令。

SSH(Secure Shell)可以让我们通过网络安全地登录远程终端。只要两台电脑在同一个局域网,并且被控电脑开启了 SSH 服务,就可以在本机终端中远程操作它。

一、准备

本文约定:

1
2
电脑 A:控制端,当前操作的电脑
电脑 B:被控端,需要远程登录的电脑

使用 SSH 前需要确认:

  • 两台电脑在同一个局域网内。
  • 电脑 B 已安装并启动 SSH 服务。
  • 电脑 A 能访问电脑 B 的 IP 地址。
  • 已知道电脑 B 的用户名和登录密码。

在电脑 B 上查看用户名:

1
whoami

查看局域网 IP:

1
hostname -I

输出中类似 192.168.1.23192.168.31.8810.0.0.15 的地址,一般就是局域网 IP。

二、安装并启动 SSH 服务

以下命令在电脑 B 上执行。

安装 openssh-server

1
2
sudo apt update
sudo apt install -y openssh-server

启动 SSH 服务,并设置开机自启:

1
sudo systemctl enable --now ssh

查看服务状态:

1
systemctl status ssh

如果看到 active (running),说明 SSH 服务已经正常运行。

少数系统的服务名可能是 sshd,如果 ssh 不生效,可以尝试:

1
systemctl status sshd

三、远程登录

假设电脑 B 的信息如下:

1
2
用户名:dreamer
IP 地址:192.168.1.23

在电脑 A 上登录电脑 B:

1
ssh dreamer@192.168.1.23

第一次连接时,终端会询问是否继续连接,输入 yes 后回车,再输入电脑 B 的用户密码即可。

登录成功后,当前终端执行的命令都运行在电脑 B 上。可以用下面的命令确认当前主机名:

1
hostname

退出远程登录:

1
exit

四、测试网络连通性

如果 SSH 连接不上,先在电脑 A 上测试能否访问电脑 B:

1
ping 192.168.1.23

如果能持续收到回复,说明两台电脑网络基本连通。

如果没有回复,优先检查:

  • 两台电脑是否在同一个局域网。
  • IP 地址是否写错。
  • 电脑 B 是否连接到了正确的 WiFi 或网口。
  • 网线、交换机、路由器是否正常。
  • 是否有多个网卡,导致看错了 IP。

五、常用优化

设置固定 IP

如果电脑 B 使用 DHCP 自动获取 IP,重启或换网络后 IP 可能变化。建议给电脑 B 设置固定 IP,后续连接会更方便。

推荐在路由器后台设置:

1
DHCP 静态分配 / 地址保留 / IP-MAC 绑定

把电脑 B 的 MAC 地址绑定到固定 IP。这样不用修改系统网络配置,也不容易把网络改乱。

如果需要在 Ubuntu 桌面版中手动设置,可以进入:

1
设置 -> 网络 -> 有线/无线 -> IPv4 -> 手动

示例:

1
2
3
4
地址:192.168.1.23
子网掩码:255.255.255.0
网关:192.168.1.1
DNS:8.8.8.8 或 114.114.114.114

注意:固定 IP 不能和局域网内其他设备重复,否则会产生 IP 冲突。

配置免密登录

每次登录都输入密码比较麻烦,可以在电脑 A 上配置 SSH 密钥。

生成密钥:

1
ssh-keygen -t ed25519

一路回车即可。默认会生成:

1
2
~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub

把公钥复制到电脑 B:

1
ssh-copy-id dreamer@192.168.1.23

之后再次登录:

1
ssh dreamer@192.168.1.23

如果配置成功,就不需要再输入密码。

设置主机别名

IP 地址不好记,可以在电脑 A 上编辑 SSH 配置文件:

1
nano ~/.ssh/config

添加:

1
2
3
4
Host robot
HostName 192.168.1.23
User dreamer
Port 22

以后可以直接登录:

1
ssh robot

六、传输文件

SSH 也可以配合 scp 在两台电脑之间传文件。

从电脑 A 复制文件到电脑 B:

1
scp local_file.txt dreamer@192.168.1.23:~/

从电脑 B 复制文件到电脑 A:

1
scp dreamer@192.168.1.23:~/remote_file.txt ./

复制整个文件夹:

1
scp -r my_folder dreamer@192.168.1.23:~/

如果已经设置别名,可以写得更简单:

1
scp -r my_folder robot:~/

七、常见问题

报错 常见原因 处理方法
Connection refused 网络能找到电脑 B,但 SSH 服务未启动或 22 端口未开放 在电脑 B 上执行 sudo systemctl status ssh,必要时执行 sudo systemctl start ssh
No route to host 网络不通,或 IP 地址写错 在电脑 A 上执行 ping 192.168.1.23,检查网络和 IP
Permission denied 用户名、密码或密钥不正确 在电脑 B 上用 whoami 确认用户名,再用 ssh 用户名@IP地址 登录
REMOTE HOST IDENTIFICATION HAS CHANGED 电脑 B 重装系统或主机指纹变化 在电脑 A 上执行 ssh-keygen -R 192.168.1.23 后重新连接

八、安全建议

  • 不要使用过于简单的系统密码。
  • 优先使用 SSH 密钥登录。
  • 不需要远程控制时,可以关闭 SSH 服务。
  • 不要随便把 SSH 端口暴露到公网。
  • 如果必须公网访问,建议先用 VPN、Tailscale、ZeroTier 等方式组网,再使用 SSH 登录。

关闭 SSH 服务:

1
sudo systemctl stop ssh

禁止开机自启:

1
sudo systemctl disable ssh

总结

局域网中使用 SSH 远控电脑的核心流程:

  1. 在被控电脑上安装并启动 openssh-server
  2. 查看被控电脑的用户名和局域网 IP。
  3. 在控制端使用 ssh 用户名@IP地址 登录。
  4. 按需配置固定 IP、免密登录和主机别名。
  5. 使用 scp 在两台电脑之间传输文件。

配置完成后,远程调试机器人、编译代码、查看 ROS 节点或启动程序都会方便很多。