docker下配置ssh

配置ssh的目的是为了方便连接,也有一些文章里提到了docker里ssh不好,不过我觉得还挺方便,而且让大部分人使用ssh连接的方式而非先登录宿主机在进入docker,相当于是通过权限管理提高了安全性,不然一旦有个人误操作,可能所有人的环境和临时成果都要收到波及。

之前写过一篇在docker里配置jupyter lab,大家可以现配ssh再配jupyter。

之所以选择自己写,也是因为网上虽然教程很多,但是良莠不齐,很多是会误导人的,写下来也方便自己和其他同学使用的时候照猫画虎。

首先,假设你已经有了一个ubuntu镜像。代码如下:

nvidia-docker run -d -it --runtime=nvidia --name="container_name" -p 3090:22 -p 3091:8888 -p 3092:3092 xxxx

其中,--name是容器的名字,-p是端口映射,22和8888是默认的,22给ssh连接,8888给jupyter,3092则是docker与外部宿主机的端口映射,没这个的话,在docker里设置3092跑起来的服务外部是调用不到的。xxxx则是你想用的原始镜像的id前四位。

  • 先执行更新
     apt-get update
  • 安装ssh-client命令
     apt-get install openssh-client
  • 安装ssh-server命令
     apt-get install openssh-server
  • 安装完成以后,先启动服务
     /etc/init.d/ssh start

启动后,可以通过“ps -e|grep ssh”查看是否正确启动。

  • 最后编辑sshd_config文件
    vim  /etc/ssh/sshd_config

这里一定要注意,sshd_config是下划线,网上有个教程打成了-,就导致vim创建了一个空的新文件,实际上打开正确的情况下sshd_config是有内容的。

打开之后改写以下内容,这里不赘述vi操作了。 

1 将PermitRootLogin xxxx-password 改为 PermitRootLogin yes

2 将最后一行的usepam yes改成usepam no

3 将Subsystem sftp ***一大堆 改成Subsystem sftp internal-sftp 

4 然后:wq 保存。 

  • 重启ssh服务
    service ssh restart
  • 设置ssh密码
    passwd root

退出容器终端exit。

从外部ssh进入:

ssh root@x.x.x.x -p 3090

x.x.x.x就是宿主机的ip地址。

大功告成,这样就可以不需要宿主机的登录或权限而使用docker了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值