docker下xserver图形界面转发以及ssh登录流程
目前有两台服务器和一个容器:
服务器A:本地主机,192.168.2.202
服务器B:远程服务器,192.168.2.246
容器C,创建于3服务器B上,从A不能直接登录C
需求
期望从A直接ssh登录C,并且实现xserver转发配置:
ssh -X uername@192.168.1.xxx -p xxxx
操作流程
登录B,创建初始容器C:
docker run -it -p 50001:22 --name xxx imageid
登录容器C后,安装openssh:
apt-get install openssh-server
修改容器C的sshd_config,确保下列选项被正确配置:
Port 22
PermitRootLogin yes
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding yes
X11UseLocalhost no
其中X11UseLocalhost no非常重要,其他大部分是默认项,该项为了避免出现回环转发
启动ssh
/etc/init.d/ssh start
修改root用户密码
passwd
提交容器到镜像,然后从新的镜像重新启动
docker run -it -p 50001:22 --name xxx imageid /usr/sbin/sshd -D
服务器A登录容器C
ssh -X root@192.168.2.246 -p 50001
其中50001是第一步中的服务器B上的端口映射,作用是把容器的22端口映射到B的50001端口, 当从A上ssh root@192.168.2.246 -p 50001时,实际是转发到了容器C的22端口上。
注意
-
创建容器的时候必须加/usr/sbin/sshd -D, 这样才能启动ssh并且容器不会自动退出;
-
-p 50001:22的目的是映射B的50001端口到容器的22端口,因此所有ssh到B上50001的链接都会转发到22, 所以从A,ssh到B的50001端口,会登录到C的22端口。
-
X11UseLocalhost no 这个选项默认是注释掉的,必须打开