创建支持ssh服务docker镜像遇到的低级错误

本文记录了在Docker环境下使用Ubuntu官方镜像时遇到的SSH连接问题及解决过程,包括调整SSH服务配置、处理空格引起的配置错误以及正确使用SSH密钥进行身份验证。

利用ubuntu官方镜像创建带ssh服务遇到的问题

背景

参考《docker从入门到实践》,网上也有同样的步骤的文章:https://blog.51cto.com/12943999/2087906
我下载ubuntu最新官方镜像,所有都执行完,最终ssh连接时报需要提供密码,但此时我连root密码还没设置!!!

尝试1

为root设置密码,使用新设置的密码SSH登陆,报验证未通过。
原因分析
ubuntu默认不允许root远程直接用账号密码登陆的,需要更改相关设置。并且一般都是新建一个普通账户,需要时用su。所以不想绕过去,转回来老老实实查找原因。

找到原因1

检查到这一步
5.修改ssh服务的安全登录配置,取消pam登录限制

sed -ri "s/session required pam_loginuid.so/#session required pam_loginuid.so/g" /etc/pam.d/sshd

sed命令是完成字符串的替换在回写到文件/etc/pam.d/sshd中,其实就是把命令前面加个#号注释掉。
cat /etc/pam.d/sshd | grep “session required pam_loginuid.so” 没找到匹配的
改为匹配部分

root@0b29286cf8be:/# cat /etc/pam.d/sshd | grep "pam_loginuid.so"
#session    required     pam_loginuid.so

一看原来是空格数单词之间空格数不对。(前面链接的参考文章是对的)
修改之后重新连接仍然要求密码,根书上和参考例子不符合。

找到原因2

为了确认sshd已经正确服务,创建了新账号abc,然后用新账号ssh登陆,成功!!
分析:问题应该出在客户端,但客户端干了什么呢?只是用ssh-keygen建了套密钥。检查创建过程,原来我的密钥文件名没有用默认的,看来是ssh命令不知道这个密钥存在。

$ ssh --help
unknown option -- -
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I pkcs11] [-i identity_file]
           [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]
           [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
           [user@]hostname [command]

看了ssh命令,有个-i参数指定密钥文件,修改ssh命令,连接成功!!!

教训

 1. 命令中字符串要小心,尤其空格等特殊字符。
 2. 默认设置通常比较省心,不是为了研究的目的不要更改。本来只想快速体验一下docker镜像创建,结果半路耽搁在ssh上了:)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值