Docker中centos如何启动sshd服务

1、启动一个docker容器:

# docker run -it centos:latest /bin/bash


这样就会新建一个docker容器,并且进入容器的bash中 
2、安装sshd:

 
  1. # yum -y install openssh-server -y
  2. # yum -y install openssh-clients -y
 


3、启动sshd服务:

# /usr/sbin/sshd -D


我的报一下错误

 
  1. Could not load host key: /etc/ssh/ssh_host_rsa_key
  2. Could not load host key: /etc/ssh/ssh_host_ecdsa_key
  3. Could not load host key: /etc/ssh/ssh_host_ed25519_key
 


此时,依次执行下列命令: 
一路按回车键确认

 
  1. # ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""
  2. # ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ""
  3. # ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
 



再启动sshd服务,一切正常。 
4、编辑sshd_config配置文件

# vim /etc/ssh/sshd_config



找到UsePAM yes这一段配置,将其改成UsePAM no

 
  1. UsePAM no
  2. #UsePAM yes
 



5、修改root的密码,如果不能passwd,执行:# yum -y install passwd

 
  1. # passwd root
  2. Changing password for user root.
  3. New password:
 



两次输入密码 
6、改完密码执行exit命令退出,这时会回到宿主机器的shell,执行下列命令将容器提交到镜像:

# docker commit containerid imagename



这里的containerid是容器的id,imagename就是提交时候镜像的名称,第一次提交的时候最好使用一个新的名称,不要覆盖了原有的干净的centos镜像。 
容器id可以通过docker ps -l命令查看到,启动容器后默认的主机名其实就是容器id。 
例如:# docker commit 67bb1912a373 sshd-images 
7、通过docker run启动一个新的容器,参数-d表示后台运行,-p表示docker到主机的端口的映射

# docker run -d -p 10022:22 imagename /usr/sbin/sshd -D



如果启动没问题的话,就可以登录到容器了:

# ssh root@localhost -p 10022



挂载一个主机目录作为数据卷 
使用-v标记也可以指定挂载一个本地的已有目录到容器中去作为数据卷:

# docker run -d -p 10022:22 --name web -v /usr/webapp:/opt/webapp sshd-images:latest /usr/sbin/sshd -D



上面的命令加载主机的/usr/webapp目录到容器的/opt/webapp目录
 

-----------------------------------------------------------------------------------------------------------------------------

先启动一个纯的centos容器

docker run -it --name=sample centos /bin/bash


然后打ssh localhost会发现如下错误。

bash: ssh: command not found

接下去就教你如何能够ssh localhost.

 
  1. yum install openssh-server -y
  2. yum install openssh-clients -y
 



这时候再试一下ssh localhost,发现错误改变: 

ssh: connect to host localhost port 22: Cannot assign requested address

说明sshd服务还没有开启。用ps -ef也可以验证这一点。

由于是docker里面的centos,所以service和systemctl都不好用。

尝试手动运行/usr/sbin/sshd

报如下错误:

 
  1. Could not load host key: /etc/ssh/ssh_host_rsa_key
  2. Could not load host key: /etc/ssh/ssh_host_ecdsa_key
  3. Could not load host key: /etc/ssh/ssh_host_ed25519_key
  4. sshd: no hostkeys available -- exiting.
 


手动执行/usr/sbin/sshd-keygen -A

 
  1. ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
  2. ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
  3. ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
 

再执行/usr/sbin/sshd成功。

为了免密码本机跳本机,执行如下命令:

 
  1. ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
  2. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  3. chmod 0600 ~/.ssh/authorized_keys
 


至此,执行ssh localhost就能成功。
 

posted @ 2024-04-03 10:31  CharyGao  阅读(259)  评论(0编辑  收藏  举报