在docker中开启sshd操作
首先在docker中安装openssh-server,安装完毕后切换到openssh-server的安装目录/etc/ssh下面。
运行ssh-keygen生成对应的密钥。
先看看sshd的配置文件sshd_config,里面有如下内容:
HostKey/etc/ssh/ssh_host_rsa_key #HostKey/etc/ssh/ssh_host_dsa_key HostKey/etc/ssh/ssh_host_ecdsa_key HostKey/etc/ssh/ssh_host_ed25519_key
有rsa,dsa,ecdsa,ed25519的加密方式,根据这几种加密方式来生成对应的密钥对。
[root@655f62a4ed82ssh]#ssh-keygen-trsa//生成rsa Generatingpublic/privatersakeypair. Enterfileinwhichtosavethekey(/root/.ssh/id_rsa): Enterpassphrase(emptyfornopassphrase): Entersamepassphraseagain: Youridentificationhasbeensavedin/root/.ssh/id_rsa. Yourpublickeyhasbeensavedin/root/.ssh/id_rsa.pub. Thekeyfingerprintis: 0e:fa:07:36:bb:87:c1:60:14:be:41:41:01:1b:4b:bcroot@655f62a4ed82 Thekey'srandomartimageis: +--[RSA2048]----+ |.+o*+| |..*.| |ooo| |Eoo| |..o.S| |.*o| |..*.| |.oo| |o+| +-----------------+ [root@655f62a4ed82ssh]#ssh-keygen-tdsa//生成dsa Generatingpublic/privatedsakeypair. Enterfileinwhichtosavethekey(/root/.ssh/id_dsa): Enterpassphrase(emptyfornopassphrase): Entersamepassphraseagain: Youridentificationhasbeensavedin/root/.ssh/id_dsa. Yourpublickeyhasbeensavedin/root/.ssh/id_dsa.pub. Thekeyfingerprintis: ee:8c:db:a8:24:68:0d:33:79:eb:09:33:ed:74:c3:66root@655f62a4ed82 Thekey'srandomartimageis: +--[DSA1024]----+ || || || |.| |=.S| |.Bo.| |.=.=.E.| |.Bo=.*| |+..+.+| +-----------------+ [root@655f62a4ed82ssh]#ssh-keygen-tecdsa//生成ecdsa Generatingpublic/privateecdsakeypair. Enterfileinwhichtosavethekey(/root/.ssh/id_ecdsa): Enterpassphrase(emptyfornopassphrase): Entersamepassphraseagain: Youridentificationhasbeensavedin/root/.ssh/id_ecdsa. Yourpublickeyhasbeensavedin/root/.ssh/id_ecdsa.pub. Thekeyfingerprintis: 84:74:de:d1:e4:98:a1:5c:27:25:8e:b7:d6:27:fd:c9root@655f62a4ed82 Thekey'srandomartimageis: +--[ECDSA256]---+ |..*++| |.=*X.| |.**.| |..o.| |Sooo| |.o...| |E.| || || +-----------------+ [root@655f62a4ed82ssh]#ssh-keygen-ted25519 Generatingpublic/privateed25519keypair. Enterfileinwhichtosavethekey(/root/.ssh/id_ed25519): Enterpassphrase(emptyfornopassphrase): Entersamepassphraseagain: Youridentificationhasbeensavedin/root/.ssh/id_ed25519. Yourpublickeyhasbeensavedin/root/.ssh/id_ed25519.pub. Thekeyfingerprintis: d8:40:95:1f:07:96:8a:83:7f:af:19:01:3b:b4:79:91root@655f62a4ed82 Thekey'srandomartimageis: +--[ED25519256--+ |....oo| |..oo.| |.+.Eoo| |..oO...| |.*.S| |.o..| |...| |o.| |o.| +-----------------+ [root@655f62a4ed82ssh]#cp~/.ssh/id_rsa.pub~/.ssh/authorized_keys
密钥对生成完毕后,需要修改sshd_config中上述文件所在的位置的。
HostKey/root/.ssh/id_rsa HostKey/root/.ssh/id_dsa HostKey/root/.ssh/id_ecdsa HostKey/root/.ssh/id_ed25519
运行/usr/sbin/sshd,查看22端口号是否开启,开启说明启动成功。
[root@655f62a4ed82ssh]#/usr/sbin/sshd [root@655f62a4ed82ssh]#lsof-i:22 COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME sshd37root3uIPv42509070t0TCP*:ssh(LISTEN) sshd37root4uIPv62509090t0TCP*:ssh(LISTEN)
补充知识:Docker容器内运行sshd进程,远程登录闪退(Exitstatus254)
注:
背景
在容器内运行了一个sshd进程,映射出一个端口供外部远程连接。可以每次连接的时候,输入密码后立即就退出了,现象如下:
[root@localhost/]#sshroot@192.168.0.6-p8000 root@192.168.0.6'spassword: Lastlogin:TueNov614:46:172018from192.168.0.6 Connectionto192.168.0.6closed.
查看调试信息,最后退出的打印如下:
...... Connectionto192.168.0.6closed. Transferred:sent2264,received2224bytes,in0.0seconds Bytespersecond:sent235367.6,received231209.1 debug1:Exitstatus254
分析
从打印来看,已经有Lastlogin的信息,所以密码肯定是输入正确的,也已经登录系统,那就是在初始化的环境的时候跪了。首先考虑了hosts.deny的配置,注释相关配置后问题依旧。
网上有说注释sshd配置文件中的UsePAM配置,也就是不使用pam鉴权模块,
#UsePAMyes
修改完重启sshd进程,这下果然可以了。至于原因,清一色的说是什么默认配置下,启用了超时断开连接功能。这就是在扯,默认的链接断开时间不可能这么短,而且为什么在非docker环境下sshd进程运行是正常的。我是不接受这个理由的。那就再看看呗。不使用pam鉴权就没问题,于是又挨个把/etc/pam.d/里和sshd相关的配置一个一个注释,还是没发现问题所在。
这时想到可以看看pam的日志,应该有些提示吧。顺带提一下,RedHat和CentOS的pam日志存放在/var/log/secure中,Ubuntu和Debian在/var/log/auth.log中存储认证信息。
果然,pam里有错误信息,
Nov615:36:56bbbsshd[11016]:Acceptedpasswordforrootfrom192.168.0.6port56394ssh2 Nov615:36:56bbbsshd[11016]:pam_limits(sshd:session):Couldnotsetlimitfor'nproc':Operationnotpermitted Nov615:36:56bbbsshd[11016]:pam_limits(sshd:session):Couldnotsetlimitfor'nofile':Operationnotpermitted Nov615:36:56bbbsshd[11016]:pam_limits(sshd:session):Couldnotsetlimitfor'memlock':Operationnotpermitted Nov615:36:56bbbsshd[11016]:pam_unix(sshd:session):sessionopenedforuserrootby(uid=0) Nov615:36:56bbbsshd[11016]:error:PAM:pam_open_session():Permissiondenied Nov615:36:56bbbsshd[11016]:Receiveddisconnectfrom192.168.0.6:11:disconnectedbyuser
可见,这是由于设置nproc、nofile、memlock等参数权限不够而导致,而这些配置是在pam组件里,由以下两个文件保存配置,
/etc/security/limits.conf
/etc/security/limits.d/90-nproc.conf
将这两个文件里面的相关设置注释,打开pam鉴权,ssh连接成功了。这才是问题所在。
另外还有其他方法
1、因为是由于权限不够导致,那就在启动容器的时候带上--privileged参数,使用特权用户,同样可以解决该问题
2、因为是在配置ulimits时错误,那么可以在启动容器时使用--ulimit=[]参数来配置
以上这篇在docker中开启sshd操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。