通过这些步骤,可以在docker容器中安装运行SSH和SFTP服务,设置ssh和sftp的密码,克隆指定的Git仓库到/home
目录,并使用bash
作为入口点,
# 基于原始镜像
FROM cyberdog_sim:v1
# 更新APT源为清华源
RUN sed -i 's|http://archive.ubuntu.com/ubuntu/|http://mirrors.tuna.tsinghua.edu.cn/ubuntu/|g' /etc/apt/sources.list
# 更新包列表并安装OpenSSH服务器和git和pip
RUN apt-get update && apt-get install -y openssh-server git pip
# 创建必要的目录
RUN mkdir /var/run/sshd
# 设置root用户密码
RUN echo 'root:Password' | chpasswd
# 允许root登录并通过密码认证
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
# 配置SFTP子系统(如果未定义)
RUN grep -q '^Subsystem\s\+sftp\s\+/usr/lib/openssh/sftp-server' /etc/ssh/sshd_config || echo "Subsystem sftp /usr/lib/openssh/sftp-server" >> /etc/ssh/sshd_config
# 克隆指定的Git仓库到/home
RUN git clone https://github.com/MiRoboticsLab/loco_hl_example /home/loco_hl_example
# PIP换源与安装
RUN pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
RUN pip install lcm pygame
# 开放22端口
EXPOSE 22
# 创建启动脚本
RUN echo '#!/bin/bash\n/usr/sbin/sshd\nexec "$@"' > /start.sh && chmod +x /start.sh
# 使用启动脚本作为入口点
ENTRYPOINT ["/start.sh"]
# 默认命令
CMD ["bash"]
构建新镜像
使用上述Dockerfile构建新的Docker镜像:
docker build -t cyberdog_sim_with_ssh:v4 .
运行新镜像
使用以下命令运行新镜像,并包括原始运行命令中的所有参数:
sudo docker run -it --shm-size="1g" --privileged=true -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -p 2222:22 cyberdog_sim_with_ssh:v4
防火墙配置
确保防火墙允许通过新端口(2222):
- UFW(Uncomplicated Firewall)配置:
sudo ufw allow 2222/tcp
sudo ufw reload
- iptables配置:
sudo iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
sudo iptables-save
连接到SSH和SFTP
-
SSH连接:
使用新的端口连接到SSH服务:
ssh root@localhost -p 2222
从远程机器连接,替换localhost
为你的主机IP地址:
ssh root@your_host_ip -p 2222
-
SFTP连接:
使用新的端口连接到SFTP服务:
sftp -P 2222 root@localhost
从远程机器连接,替换localhost
为你的主机IP地址:
sftp -P 2222 root@your_host_ip