虽然说很多人觉得容器应该只运行一个应用,不应该有sshd,但是这里还是以学习的态度记录一下docker搭建sshd的过程。
生成密钥:
这里我没搞懂passphase是干吗用的,上网查了一下,如果说我采用非密码方式登录,一旦别人登了我的电脑,就可以使用我的key来登录其他的远程主机,所以如果在创建key的时候,输入了passphase,那么以后的每一次登录不仅需要key,还需要输入passphase,这样就算key泄露,或者别人登了我的电脑,他没有passphase也没用,这是对ssh的一点知识补充。
当然默认是可以不用passphase的,也就是在创建key的时候不输入即可。这里还是输入了passphase,12345。
生成的密钥对会放在~/.ssh目录下,修改私钥权限,也即id_rsa,因为这是只能自己用的,所以go权限为0。
然后把公钥提取出来,准备放进镜像里。
编写run.sh,用于启动容器的sshd进程:
dockerfile:
然后构建镜像:
启动容器:
查看容器:
ssh连接:
如果是第一次登录,那么会询问是否信任这台服务器,如果yes,那么就会把其公钥和ip放入本地主机的~/.ssh/knownhosts文件下,如果服务器和主机的公钥密钥对改了,那么就无法登录了,因为host文件里记录了之前的ip和公钥对,这是会认为新的服务器的公钥变了,有人做了中间人攻击。解决办法是使用ssh-keygen -R ip,或者删除host文件里额对应的信息。
接着,会让输入passphase,之后就ssh登录进去了。
有个问题,每一次都输入passphase很费劲,可以使用key-gen的agent功能。
使用:
添加passphase到私钥:
这样就不必每一次都输入passphase了。
但是、、、这样会不会与passphase的设计初衷相违背呢?个人感觉会吧。