实现以下功能:
多用户SSH访问:允许多个用户通过SSH远程登录服务器。每个用户使用自己的凭证登录,支持安全认证(如密码或密钥)。
每个用户独立的home目录(互相隔离):这是Linux系统的默认行为,每个用户都有自己的/home/username目录,其他用户默认无权限访问(权限为700)。可以通过用户组或ACL进一步强化隔离。
管理员创建Docker容器,每个用户有独立的Docker容器,支持远程SSH连接:管理员(root或sudo用户)创建和管理Docker容器。为每个用户分配一个独立的容器,并在容器内运行SSH服务器,用户可以通过SSH连接到自己的容器(而非主机)。这实现隔离:每个用户的环境独立,避免互相干扰。需要暴露容器的SSH端口到主机,并管理端口映射以避免冲突。容器内可以预装必要的工具。
用户在Windows下访问文件夹(通过Samba):Samba允许Windows客户端通过SMB协议访问服务器上的共享文件夹。每个用户可以有自己的共享目录,权限控制基于用户组。既然所有机器在同一局域网(LAN),无需公网配置,只需LAN IP访问。
配置流程
1.准备工作
更新系统并安装所需包:
sudo apt update && sudo apt upgrade -y
sudo apt install openssh-server xrdp samba docker.io -yopenssh-server:提供SSH服务,默认端口22。
xrdp:提供RDP服务,默认端口3389(Windows远程桌面客户端连接)。
samba:提供文件共享。
docker.io:Ubuntu的Docker包
启动并启用服务:
sudo systemctl enable --now ssh
sudo systemctl enable --now xrdp
sudo systemctl enable --now smbd
sudo systemctl enable --now docker检查状态:sudo systemctl status ssh xrdp smbd docker。
添加当前用户到Docker组
sudo usermod -aG docker $USER关闭终端重新打开
防火墙配置(如果启用ufw):
sudo ufw allow ssh # 22端口
sudo ufw allow 3389/tcp # XRDP
sudo ufw allow samba # 139/445端口
sudo ufw reload2.SSH配置
配置多用户SSH访问和独立Home目录
创建用户:
为每个用户创建账号,每个有独立/home/username。
sudo adduser user1 # 创建user1,设置密码
sudo adduser user2 # 同上配置SSH
编辑/etc/ssh/sshd_config
PermitRootLogin no # 禁用root SSH
PasswordAuthentication yes # 允许密码(或no,只用密钥)重启SSH:
sudo systemctl restart ssh从其他机器测试SSH:
ssh user1@192.168.1.100192.168.1.100是ubuntu服务器
3.配置Samba(Windows访问文件夹)
创建共享目录:
为每个用户创建共享文件夹。
sudo mkdir -p /shared/user1 /shared/user2
sudo chown user1:user1 /shared/user1
sudo chown user2:user2 /shared/user2
sudo chmod 755 /shared # 公共访问,但子目录隔离添加Samba用户
# 为user1添加Samba密码,按提示输入密码
sudo smbpasswd -a user1
# 为user2添加Samba密码
sudo smbpasswd -a user2
# 确认用户已添加(可选)
sudo pdbedit -L
# 输出应包含:user1:1001: 、user2:1002:(数字是用户UID)编辑 Samba 配置文件(适配 /shared 目录)
/etc/samba/smb.conf
保留[global]基础配置,在文件末尾添加针对 user1/user2 的共享配置(替换或补充原有内容):
[global]
workgroup = WORKGROUP # Windows默认工作组,无需修改
security = user # 基于用户认证,核心配置
map to guest = bad user
usershare allow guests = no
create mask = 0644 # 用户创建文件的默认权限
directory mask = 0755 # 用户创建目录的默认权限
force create mode = 0644
force directory mode = 0755
# user1专属共享(映射你创建的/shared/user1)
[user1_share]
comment = user1 Private Shared Folder
path = /shared/user1 # 指向你已创建的目录
valid users = user1 # 仅允许user1访问,核心隔离配置
browseable = no # 不在网络邻居列表显示,增强隐私
writable = yes # 允许user1读写该目录
guest ok = no # 禁止匿名访问
create mask = 0600 # 确保文件仅user1可读写
directory mask = 0700 # 确保目录仅user1可操作
# user2专属共享(映射你创建的/shared/user2)
[user2_share]
comment = user2 Private Shared Folder
path = /shared/user2
valid users = user2
browseable = no
writable = yes
guest ok = no
create mask = 0600
directory mask = 0700验证配置语法并重启 Samba 服务
# 检查配置文件语法是否正确(关键!有错误会导致服务启动失败)
sudo testparm
# 若输出“Load smb config files from /etc/samba/smb.conf”且无报错,说明配置正常
# 重启Samba服务生效
sudo systemctl restart smbd nmbd
# 确认服务状态(显示active(running)即正常)
sudo systemctl status smbd防火墙放行(若启用了 ufw)
# 放行Samba相关端口
sudo ufw allow samba
# 重新加载防火墙规则
sudo ufw reloadWindows 客户端访问验证
打开 Windows 文件资源管理器,在地址栏输入:\\你的Ubuntu服务器IP\user1_share(比如\\192.168.1.100\user1_share);
弹出认证窗口,输入用户名user1和你设置的 Samba 密码;
成功进入后,只能看到/shared/user1目录下的文件,尝试访问\\服务器IP\user2_share会提示权限拒绝(验证隔离性);
同理,用 user2 账号登录只能访问 user2_share。
Docker 配置 ROS1 开发环境(多用户隔离版)
拉取 ROS1 Noetic 基础镜像
# 拉取官方ROS1 Noetic完整镜像(包含开发工具)
docker pull osrf/ros:noetic-desktop-full构建带 SSH 的 ROS1 镜像
创建Dockerfile(放在管理员目录,如/home/admin/ros1-docker/):
# 基于官方ROS1 Noetic镜像
FROM osrf/ros:noetic-desktop-full
# 避免交互提示
ENV DEBIAN_FRONTEND=noninteractive
# 安装SSH服务(适配用户远程访问)
RUN apt update && apt install -y openssh-server sudo && \
# 创建SSH运行目录
mkdir -p /var/run/sshd && \
# 创建普通用户(以lxj01为例,每个用户容器单独创建)
useradd -m -s /bin/bash lxj01 && \
# 设置用户密码(统一设为ros123,也可让用户自行修改)
echo 'lxj01:ros123' | chpasswd && \
# 给用户sudo权限(容器内开发需要)
usermod -aG sudo lxj01 && \
# 允许root SSH登录(可选,管理员维护用)
echo 'root:ros123' | chpasswd && \
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \
# 清理缓存
apt clean && rm -rf /var/lib/apt/lists/*
# 初始化ROS环境(自动加载)
RUN echo "source /opt/ros/noetic/setup.bash" >> /home/lxj01/.bashrc && \
echo "source /opt/ros/noetic/setup.bash" >> /root/.bashrc
# 暴露SSH端口
EXPOSE 22
# 启动SSH服务+ROS环境(后台运行)
CMD ["/usr/sbin/sshd", "-D"]构建镜像(管理员执行)
cd /home/admin/ros1-docker
docker build -t ros1-noetic-ssh:v1 .为每个用户创建独立的 ROS1 容器
管理员为 user1、user2 分别创建容器,通过端口映射隔离(复用你之前的端口规则):
# 为user1创建ROS1容器(映射主机2221端口→容器22)
docker run -d --name user1-ros1 -p 2221:22 \
--privileged=true \ # 赋予容器硬件访问权限(ROS操作外设需要)
-v /shared/user1/ros_ws:/home/user1/ros_ws \ # 挂载用户共享目录到容器(持久化代码)
ros1-noetic-ssh:v1
# 为user2创建ROS1容器(映射主机2222端口→容器22)
# 注意:需修改Dockerfile中的用户名为user2,或构建时指定,这里简化为直接创建
docker run -d --name user2-ros1 -p 2222:22 \
--privileged=true \
-v /shared/user2/ros_ws:/home/user2/ros_ws \
ros1-noetic-ssh:v1用户远程访问自己的 ROS1 容器
用户在 Windows/Linux 客户端通过 SSH 连接容器,即可使用 ROS1 环境:
# user1连接自己的ROS1容器(替换为你的Ubuntu服务器IP)
ssh user1@192.168.1.100 -p 2221
# 密码:ros123
# 登录后验证ROS1环境
roscore # 启动ROS核心,无报错则环境正常多用户镜像复用(可选)
# 为user2创建容器时动态创建用户(无需修改Dockerfile)
docker run -d --name user2-ros1 -p 2222:22 \
--privileged=true \
-v /shared/user2/ros_ws:/home/user2/ros_ws \
osrf/ros:noetic-desktop-full \
/bin/bash -c "apt update && apt install -y openssh-server sudo && \
useradd -m -s /bin/bash user2 && echo 'user2:ros123' | chpasswd && \
usermod -aG sudo user2 && mkdir -p /var/run/sshd && \
echo 'source /opt/ros/noetic/setup.bash' >> /home/user2/.bashrc && \
/usr/sbin/sshd -D"容器支持 ROS 图形化界面(可选)
如果用户需要在容器中运行 RViz、Gazebo 等图形化工具,需在创建容器时添加参数:
docker run -d --name lxj01-ros1 -p 2221:22 \
--privileged=true \
-v /shared/lxj01/ros_ws:/home/lxj01/ros_ws \
-v /tmp/.X11-unix:/tmp/.X11-unix \ # 共享X11套接字
-e DISPLAY=$DISPLAY \ # 传递显示环境变量
--net=host \ # 共享主机网络(ROS节点通信更方便)
ros1-noetic-ssh:v1
评论区