docker 容器搭建ssh服务

2020-03-29  本文已影响0人  长歌行夜一

1. 进入容器,

docker run -it --name mycontainer -p 9022:22 --privileged 34054 /usr/sbin/init

将容器的22端口映射到主机的9022端口

注意:必须加上--privileged  /usr/sbin/init,否则当容器使用systemctl启动sshd服务时会报错:Failed to get D-Bus connection: Operation not permitted

原因:

Docker的设计理念是在容器里面不运行后台服务,容器本身就是宿主机上的一个独立的主进程,也可以间接的理解为就是容器里运行服务的应用进程。一个容器的生命周期是围绕这个主进程存在的,所以正确的使用容器方法是将里面的服务运行在前台。

再说到systemd,这个套件已经成为主流Linux发行版(比如CentOS7、Ubuntu14+)默认的服务管理,取代了传统的SystemV风格服务管理。systemd维护系统服务程序,它需要特权去会访问Linux内核。而容器并不是一个完整的操作系统,只有一个文件系统,而且默认启动只是普通用户这样的权限访问Linux内核,也就是没有特权,所以自然就用不了!

转自:https://blog.csdn.net/cheney__chen/article/details/81639203

2. 下载openssh-server 和openssh-clients

2. 这里注释掉多余的行:

注释掉HostKey /etc/ssh/ssh_host_ecdsa_key

注释掉HostKey /etc/ssh/ssh_host_ed25519_key

PermitRootLogin yes  #允许root用户ssh登录

将RSAAuthentication(如果没找到,可以不管) 和 PubkeyAuthentication 后面的值都改成yes #允许密钥方式登陆

3.创建公私密钥:

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

-t 指定密钥类型,默认是 rsa ,可以省略。

-C 设置注释文字,比如邮箱。

-f 指定密钥文件存储文件名

注: 这里切忌一路会车,不要输密码,否则当启动服务时可能会报错:

4. 修改容器root密码:

echo "123456" | passwd --stdin "root"

5. 启动ssh服务(用要用绝对路径)

/usr/sbin/sshd -D &

6. 将本地的公钥文件保存到远程服务器的authorized_keys文件中:

ssh root@172.17.0.2  'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

7. 这样就可以用密钥登陆了

ssh root@172.17.0.2

注:如果私钥文件在其它位置,可以用 -i 指定

ssh root@172.17.0.2 -p 22 -i ~/you_private_file

上一篇下一篇

猜你喜欢

热点阅读