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

image.png

八、后续问题

这种方式最多只能连接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+回车优雅地退出吧~

posted @ 2022-10-27 22:10  E·r  阅读(103)  评论(0编辑  收藏  举报