Разрешители в sshd_config из нескольких c-диапазонов классов

Предполагая, что имя вашего файла file, вы можете попробовать следующее:

while read -r line; 
do 
var="$(echo "$line" | cut -d ',' -f 4)";

  if [[ "$var" = "E:" ]]; then echo "$line" | sed s/"$var"/''/g ; 
  else echo "$line";
  fi; 

done < file

или:

while read -r line; do var="$(echo "$line" | cut -d ',' -f 4)"; if [[ "$var" = "E:" ]]; then echo "$line" | sed s/"$var"/''/g ; else echo "$line";fi; done < file

Объяснение:

  1. while read -r line; читает файл построчно
  2. var="$(echo "$line" | cut -d ',' -f 4)"; записывает строку на 4 месте, разделенную , в переменную var
  3. if [[ && "$var" = "E: " ]]; then echo "$line" | sed s/"$var"/' '/g ; if $var has string exactly E: тогда sed s/"$var"/''/g ; заменяет ее на пустую """
  4. else echo "$line"; в противном случае печатает строку как есть

Пример output (как ожидалось из вопроса):

  • file:

    $ cat file
    12,324,32342,E:fsdsf,23432,34534,45345,324
    
    13,3224,342,E:werwefsdsf,23432,34534,45345,324
    
    121,3244,33442,E:,23432,34534,45345,324
    
  • Выполнение команды:

    $ while read -r line; do var="$(echo "$line" | cut -d ',' -f 4)"; if [[ "$var" = "E:" ]]; then echo "$line" |sed s/"$var"/' '/g ; else echo "$line";fi; done < file
    12,324,32342,E:fsdsf,23432,34534,45345,324
    
    13,3224,342,E:werwefsdsf,23432,34534,45345,324
    
    121,3244,33442,,23432,34534,45345,324
    

Вы также можете перенаправить вывод в файл, используя >> file2 или |tee file2 в последней части команды:

while read -r line; do var="$(echo "$line" | cut -d ',' -f 4)"; if [[ "$var" = "E:" ]]; then echo "$line" |sed s/"$var"/' '/g ; else echo "$line";fi; done < file | tee file2
1
02.10.2018, 21:39
2 ответа

В справочной странице сказано, что вы можете записывать адреса в формате cidr (addr/len ). Пример:

AllowUsers user@192.168.176.0/22

Обратите внимание, что это не будет работать с «несогласованными» адресами (, где биты вне маски не все равны 0, например.192.168.177.0/22)или сочетанием addr/len и подстановочных знаков (, например.192.168.176.*/22).

1
27.01.2020, 23:42

AllowUsersподдерживает шаблоны с подстановочными знаками и адресами CIDR. Но я не могу заставить их работать одновременно, и шаблоны тоже не сильно помогут, так как доступны подстановочные знаки ?и *, но не [789].

Итак, проще всего просто автоматически сгенерировать правила:

for i in {177..179}; do echo "AllowUsers user@123.56.$i.*" ; done

В документации об этом не сказано, но несколько строк AllowUsersработают нормально.

Кроме того, в этом случае вы можете использовать что-то вроде:

AllowUsers user@123.56.176.0/22
DenyUsers  user@123.56.176.0/24

или

AllowUsers !user@123.56.176.0/24,user@123.56.176.0/22
0
27.01.2020, 23:42

Теги

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