Acho que authorized_keys
precisa ser 0600. 0400 é somente leitura, o que significa que nem o usuário pode escrevê-lo!
A razão pela qual o "modo" não funciona no recurso ssh_authorized_key
é que esse recurso apenas adiciona uma entrada, não gerencia o arquivo.
Em termos de solução alternativa / gerenciamento de muitos usuários, eu faria assim (no Puppet 3, mas tenho certeza que isso é melhor em Puppet4 / 5 usando alguma iteração?):
define myuser (
$user,
$key,
) {
user { $user:
home => "/home/${user}",
ensure => present,
purge_ssh_keys => true,
}
file { "/home/${user}/.ssh/authorized_keys":
ensure => file,
mode => "0600",
require => User[$user],
}
ssh_authorized_key { "${user}@${host}":
ensure => present,
user => $user,
type => 'ssh-ed25519',
key => "${key}",
}
}
que você pode usar com:
node default {
myuser { "shearn89":
user => "shearn89",
key => "somelongasciistring",
}
}
Você também pode fazer algumas coisas inteligentes com a definição de usuários (possivelmente no Hiera) e depois criar os recursos .
Você também pode usar uma ferramenta como o Ansible para executar uma tarefa em toda a sua plataforma e corrigir o arquivo. Descobri que Ansible complementa Puppet bem quando usado para esse tipo de tarefa de orquestração / one-off.