ubuntu容器连接ssh
解决docker容器的访问问题,通过暴露22端口映射到宿主机端口,用ssh连接,可实现对容器内终端的可视化和编辑功能。
一、编写dockerfile
FROM ubuntu
# Copy everything
COPY . ./
EXPOSE 22
二、制作镜像
docker build -t ubt .
三、运行容器
docker run -it -p 8089:22 ubt
遇到一个问题:
ssh root@127.0.0.1:8089
ssh: Could not resolve hostname 127.0.0.1:8089: Name or service not known
根本就ping不通
ping 127.0.0.1:8089
ping: 127.0.0.1:8089: Name or service not known
这是因为docker里还没有安装ssh
四、docker内配置
apt-get update
apt-get upgrade
apt-get install -y openssh-server
apt-get install -y openssh-server --fix-missing
选择地区:Asia Shanghai
mkdir /var/run/sshd
echo 'root:screencast' |chpasswd
service ssh start
五、宿主机上连接
ssh root@127.0.0.1 -p 8089
但是还有一个bug:
Permission denied, please try again.
六、docker里设置
^C
结束ssh
apt-get install vim
vim /etc/ssh/sshd_config
在末尾加上
RSAAuthentication yes
PermitRootLogin yes
修改root用户的密码
passwd root
service ssh restart
七、成功
此时,再登录ssh
ssh root@127.0.0.1 -p 8089
八、后续问题
这种方式最多只能连接10个
ssh root@127.0.0.1 -p 8089
ssh_exchange_identification: read: Connection reset by peer
这是因为并发数限定了
于是,
vim /etc/ssh/sshd_config
将 MaxStartups
改为 80:10:100
(从第80个并发开始,以10%的几率拒绝访问,从100个并发开始全部拒绝)
service ssh restart
又可以访问了!
但是最好还是记得exit+回车
优雅地退出吧~