【docker】sshd

来源:互联网 发布:淘宝代销货图片签协议 编辑:程序博客网 时间:2024/06/05 07:15

虽然说很多人觉得容器应该只运行一个应用,不应该有sshd,但是这里还是以学习的态度记录一下docker搭建sshd的过程。


生成密钥:

ssh-keygen -t rsa

这里我没搞懂passphase是干吗用的,上网查了一下,如果说我采用非密码方式登录,一旦别人登了我的电脑,就可以使用我的key来登录其他的远程主机,所以如果在创建key的时候,输入了passphase,那么以后的每一次登录不仅需要key,还需要输入passphase,这样就算key泄露,或者别人登了我的电脑,他没有passphase也没用,这是对ssh的一点知识补充。

当然默认是可以不用passphase的,也就是在创建key的时候不输入即可。这里还是输入了passphase,12345。


生成的密钥对会放在~/.ssh目录下,修改私钥权限,也即id_rsa,因为这是只能自己用的,所以go权限为0。

chmod 700 ~/.ssh/id_rsa
然后把公钥提取出来,准备放进镜像里。

cat ~/.ssh/id_rsa.pub > authorized_keys


编写run.sh,用于启动容器的sshd进程:

#!/bin/bash/usr/sbin/sshd -D


dockerfile:

FROM ubuntu:latest  MAINTAINER YAORUN apt-get update && apt-get install -y openssh-server RUN mkdir -p /var/run/sshdRUN mkdir -p /root/.sshADD authorized_keys /root/.ssh/authorized_keysADD run.sh /run.sh#RUN chmod 600 /root/.ssh/authorized_keysRUN chmod 777 /run.shEXPOSE 22ENTRYPOINT ["/run.sh"]

然后构建镜像:

docker build -t sshd .

启动容器:

 docker run -d -p 50010:22 sshd

查看容器:

docker ps



ssh连接:

ssh root@127.0.0.1 -p 50010


如果是第一次登录,那么会询问是否信任这台服务器,如果yes,那么就会把其公钥和ip放入本地主机的~/.ssh/knownhosts文件下,如果服务器和主机的公钥密钥对改了,那么就无法登录了,因为host文件里记录了之前的ip和公钥对,这是会认为新的服务器的公钥变了,有人做了中间人攻击。解决办法是使用ssh-keygen -R ip,或者删除host文件里额对应的信息。

接着,会让输入passphase,之后就ssh登录进去了。


有个问题,每一次都输入passphase很费劲,可以使用key-gen的agent功能。

使用:

ssh-add

添加passphase到私钥:


这样就不必每一次都输入passphase了。


但是、、、这样会不会与passphase的设计初衷相违背呢?个人感觉会吧。