背景
参考《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上了:)