问题描述
在学习使用Chef时,尝试创建一个简单的用户,并遇到了问题。他使用了一个Chef食谱来创建用户,但是在尝试使用私钥登录时遇到了“Permission denied (publickey)”的错误。他怀疑自己的食谱可能有一些问题,导致无法成功登录。
以下是用户提供的Chef食谱的代码:
user 'foox' do
comment 'test me'
uid '6711'
home '/home/foox'
shell '/bin/bash'
password '<password_shadow_here>'
end
directory "/home/foox" do
owner "foox"
group "foox"
mode 00755
action :create
end
directory "/home/foox/.ssh" do
owner "foox"
group "foox"
mode 00600
action :create
end
file '/home/foox/.ssh/authorized_keys' do
owner "foox"
group "foox"
mode "00600"
content IO.read('/root/.ssh/authorized_keys')
action :create
end
用户猜测可能是自己的食谱存在问题,导致无法正确登录。他希望了解解决方案,找出可能缺少的部分。
解决方案
用户的猜测基本上是正确的,问题可能出在权限设置上。另外,还有一些改进的地方可以让食谱更加简洁和可靠。
修正权限问题
在食谱中,用户创建了目录/home/foox/.ssh
并设置了权限为00600
,这意味着只有用户本人才有权限访问该目录。然而,SSH要求私钥文件和~/.ssh
目录的权限必须非常严格,不允许其他用户访问。为了修正这个问题,将权限改为0700
,确保只有用户本人可以访问该目录。
使用manage_home
属性
user
资源有一个名为manage_home
的属性,它可以帮助自动创建用户的家目录,从而避免重复的资源设置。通过将manage_home
属性设置为true
,你可以让Chef自动创建用户的家目录。这样可以使你的食谱更简洁,并避免重复的资源设置。
以下是修正后的食谱代码:
user 'foox' do
comment 'test me'
uid '6711'
home '/home/foox'
shell '/bin/bash'
password '<password_shadow_here>'
manage_home true # 自动创建用户家目录
end
directory "/home/foox/.ssh" do
owner "foox"
group "foox"
mode "0700" # 修正权限为0700
action :create
end
file '/home/foox/.ssh/authorized_keys' do
owner "foox"
group "foox"
mode "0600" # 授权文件权限改为0600
content IO.read('/root/.ssh/authorized_keys')
action :create
end
修正后的食谱将权限设置修正为了0700
和0600
,并添加了manage_home
属性来自动创建用户的家目录。
通过以上修正,你的食谱应该可以成功创建用户,并允许你使用私钥进行登录了。
请注意,以上解决方案基于你提供的信息和最佳回答。如果你遇到其他问题或有其他需求,请随时提问。
正文完