Для извлечения полей на основе шаблона perl
обычно лучше, чем awk
:
perl -lne '
if (/^\s*(\d+)\s*\S+\s*(.*?)\s*$/) {
print "<tag>$1</tag><tag>$2</tag>"
}'
который на ваш ввод дает:
<tag>12</tag><tag>Cinema - 3D/Multiplex</tag>
<tag>7</tag><tag>Status Update</tag>
<tag>5</tag><tag>Movie</tag>
Это означает, что вы можете делать более сложные вещи, например, правильно кодировать HTML, если необходимо, например:
perl -Mopen=locale -MHTML::Entities -lne '
if (/^\s*(\d+)\s*\S+\s*(.*?)\s*$/) {
print map {"<tag>" . encode_entities($_) . "</tag>"} $1, $2
}'
Или кодирование XML:
perl -Mopen=locale -MXML::LibXML -lne '
if (/^\s*(\d+)\s*\S+\s*(.*?)\s*$/) {
print map {
my $e = XML::LibXML::Element->new("tag");
$e->appendText($_);
$e->toString} $1, $2
}'
Вы хотите различать разные источники подключения, давая им разных пользователей.Нет смысла делиться файлом authorized_keys
между этими разными пользователями, потому что тогда любой из ключей позволит войти в любую из учетных записей. (Это могло бы работать , но разделение учетных записей не дало бы никакого преимущества в плане безопасности.)
Поэтому имейте по одному файлу authorized_keys
для каждого пользователя, принадлежащего пользователю root. Каждый файл authorized_keys
авторизует только ключ, соответствующий этой учетной записи. Создание нескольких ключей дешево, нет причин не делать этого. Вам не нужно отключать StrictModes
. Вы можете использовать директиву AuthorizedKeysFile
в блоке Match
для каждого пользователя или иметь одну директиву AuthorizedKeysFile
, содержащую % u
, которая заменяется по имени пользователя.
Создание пользователей туннеля:
sudo groupadd sshtungrp
sudo mkdir /etc/ssh/tunnelkeys # or wherever you want to keep them
# Add users without /home
while read p; do sudo useradd $p -r -s /bin/true -g sshtungrp; done < users.txt;
# Copy key file with: sudo vim /etc/ssh/tunnelkeys/%u
sshd_config:
Match Group sshtungrp
AuthorizedKeysFile /etc/ssh/tunnelkeys/%u