Марионетка: ssh - authorized_keys - Permission denied

Все наши ~ / .ssh / authorized_keys были созданы с режимом 0400 (пользовательский, только для чтения). Мы хотим управлять этими файлами с помощью Puppet, поэтому я создал следующее:

class users {
 user { 'julia':
  home           => '/home/julia',
  ensure         => present,
  purge_ssh_keys => true,
 }
}

ssh_authorized_key { 'julia@dirty':
  ensure => present,
  user   => 'julia',
  type   => 'ssh-ed25519',
  key    => 'AAAAC3NzaC1lvvvvvvxxxxxO1mXiiyj3Af17MviiiiiiiifffffzU5e//e/ffff/y',
}

Однако, когда я запускаю 'puppet agent --test' на узле, я получаю следующую ошибку:

Error: Puppet::Util::FileType::FileTypeFlat could not write /home/julia/.ssh/authorized_keys: Permission denied - /home/julia/.ssh/authorized_keys
Error: /Stage[main]/Profile::Base/Ssh_authorized_key[julia@dirty]: Could not evaluate: Puppet::Util::FileType::FileTypeFlat could not write /home/julia/.ssh/authorized_keys: Permission denied - /home/julia/.ssh/authorized_keys

Я могу «исправить» файл проблема со следующим:

file { "/home/julia/.ssh/authorized_keys":
    ensure => present,
    mode => '0600',
}

Я удивлен, что это проблема. Я думал, что это будет работать с любым допустимым режимом файла (0600 или 0400). Я не могу найти в документации по модулю Forge ничего о допустимых режимах или изменении режимов. Параметр 'file' - приемлемый обходной путь, но он не работает как вложенный в раздел 'ssh_authorized_key', поэтому не так аккуратно, как хотелось бы. Кроме того, я не знаю, как это сделать для многих пользователей.

Не могли бы вы предложить способ решения этой проблемы лучше?

В поиске есть несколько сообщений, в которых задается та же проблема, но нет хороших решений. Вот один, сделанный 7 лет назад. Я не думаю, что патч когда-либо делал это в базе кода: https://projects.puppetlabs.com/issues/5395

1
задан 21 November 2017 в 07:33
1 ответ

Я думаю, что authorized_keys должен быть 0600. 0400 доступен только для чтения, что означает, что даже пользователь не может его записать!

Причина "режима" не работает в ресурсе ssh_authorized_key , потому что этот ресурс только добавляет запись, он не управляет файлом.

С точки зрения обходного пути / управления большим количеством пользователей, я бы сделал это как это (в Puppet 3, но я уверен, что в Puppet4 / 5 это более аккуратно, используя некоторую итерацию?):

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}",
  }
}

, которое вы затем можете использовать с:

node default {
  myuser { "shearn89":
    user => "shearn89",
    key => "somelongasciistring",
  }
}

Вы также можете сделать некоторые умные вещи с определением пользователей (возможно, в Hiera), а затем создание ресурсов .

Или вы можете рассмотреть возможность использования такого инструмента, как Ansible, для запуска задачи на всей вашей платформе и исправления файла. Я обнаружил, что Ansible прекрасно дополняет Puppet, когда используется для такого рода оркестровки / разовых задач.

1
ответ дан 3 December 2019 в 23:23

Теги

Похожие вопросы