Старый добрыйpaste
:
printf '%.2f\n' "${qy[@]}" | paste -d'|' textfile -
61537000|COO|DI|VMD|2018-01-08 00:00:00|133.75
61537000|COO|DI|VMD|2018-01-09 00:00:00|197.57
61537000|COO|DI|VMD|2018-01-10 00:00:00|211.06
61537000|COO|DI|VMD|2018-01-11 00:00:00|195.40
61537000|COO|DI|VMD|2018-01-12 00:00:00|155.91
(Для краткости я скопировал только первые 5 записей ).
Без изменения файла sshd_config
ответа вообще нет. Для этого нужно настроитьAuthorizedPrincipalsFile
(илиAuthorizedPrincipalsCommand
). Без этой директивы в sshd_config
поведение по умолчанию заключается в том, что имя пользователя для попытки аутентификации должно быть указано буквально как один из принципалов, встроенных в сертификат. Вот почему «root» работает, а «root@server1» — нет.
Чтобы сертификат, использующий «root@server1», работал (без добавления записей в /root/.ssh/authorized_keys
), вам необходимо настроить AuthorizedPrincipalsFile
для пользователя root (более поздние версии OpenSSH разрешают эту директиву внутри блок Match
)и список «root@server1» и сделайте что-то подобное на других серверах. Вы также можете расширить это, чтобы разрешить сертификаты, применимые к группам серверов, таким как «root@dev» или даже «root@ *», если каждый соответствующий вариант указан как принципал в AuthorizedPrincipalsFile
.
Другой способ реализовать это — явно перечислить ключ ЦС и разрешенных принципалов в файле .ssh/authorized_keys
,используя обе опции cert-authority
и principals=
. Они описаны в справочной странице sshd
формата файла авторизованных ключей _.
Проблема заключается в том, что при выпуске ssh-сертификата вы напрямую ставите root
в Principals
вы предоставите доступ ко всем серверам, которые доверяют вашему ЦС.
Во избежание этого никогда не выпускайте сертификат с username
. Вместо этого создайте стратегию доступа. Типичный сценарий: некоторым людям нужен доступ к тестовым серверам, некоторым нужен доступ к серверам баз данных, а некоторым нужен доступ ко всем серверам. Поэтому я создаю несколько принципов
project-dev
-Доступ к серверам разработки/тестирования project-databases
-Доступ к серверам баз данных project-super
-Доступ ко всем серверам Для этого добавьте AuthorizedPrincipalsFile /etc/ssh/auth_principals/%u
в файл sshd_config
.
Таким образом, когда кто-то пытается войти на сервер с именем пользователя root
, он проверяет файл /etc/ssh/auth_principals/root
(, уведомление %u
означает пользователя ).
Таким образом, если в сертификате пользователя указан принцип, указанный в этом файле, пользователю будет предоставлен доступ.
Авторизованный файл принципов для этого сценария будет
project-dev\nproject-super
project-dev\nproject-super
project-super
Итак, создайте стратегию в соответствии с вашими потребностями.
Примечание. :Если вы по-прежнему выпускаете сертификат с root
в Principles
, он все равно будет работать. Так что избегайте этого.
Я написал блог, чтобы настроить полную инфраструктуру сертификатов ssh: