Чтобы следовать принципу Linux «одна задача - один инструмент»:
Печатает только необходимый блок (как в примере CAD
)
sed '/ ^ \ s * [0-9] . * CAD /! D;: a; N; / \ n \ s * [0-9] /! s / \ n / \ x0 /; ta; P; D '
Сортировка в обратном порядке
sort -rn
Возьмите только первые запрошенные блоки (как в примере 4
)
head -4
Обратите внимание, что большинство команд Linux работают с строками (не с блоками ), поэтому они были преобразованы в строки путем изменения \ n
ew строка в нулевой символ ( \ x0
), а затем преобразована обратно tr .
Итак, вся строка:
sed '/^\s*[0-9].*CAD/!d;:a;N;/\n\s*[0-9]/! s/\n/\x0/;ta;P;D' test.txt |
sort -rn |
head -4 |
tr '\0' '\n'
Мне нравится идея G-Man answer изменить R
ow S
eparator, но это немного подходит в случае. Проще сделать это обычным способом
awk '
/^[ 0-9]{4} /{ #for start block string
if($NF==cat){ #if it is a needed block
idx=$1
BLOCK[idx]=$0 #put line onto array with asigned index
}
else
idx=0 #otherways asign index to 0
next #end itteration, go to start with next line
}
idx{ #pass inappropriate blocks (with 0-index)
BLOCK[idx]=BLOCK[idx] "\n" $0 #add line to array element with index
}
END{ #when finish all lines
for(i=0;imax)
max=idx #find maximum index (field No.1 in block)
}
if(!max)
exit #exit script if array empty (no more blocks)
print BLOCK[max] #print block with maximum index
delete BLOCK[max] #remove array element for furure search
}
}' cat="CAD" num=4 test.txt
Во-первых, нет ничего плохого в использовании разных ключей для разных учетных записей. Это довольно много для интерактивных оболочек, но есть веские причины делать это, когда вы имеете дело с другими, неинтерактивными службами. Например, несколько лет назад GitHub начал разрешать более сильные SSH-ключи, в то время как Bitbucket настаивал на использовании более слабых ключей еще некоторое время. В то время правильным действием было использование разных ключей для доступа к GitHub и Bitbucket.
Другой пример — rsync
. Если вы используете rsync
, скажем, для развертывания файлов на веб-сервере, вам, вероятно, нужны для этого выделенные ключи SSH. Они позволяют вам устанавливать другие разрешения, отличные от тех, которые вы обычно используете для своей интерактивной учетной записи.
Вернемся к вашему вопросу об управлении несколькими ключами: SSH позволяет устанавливать разные параметры для разных мест назначения. Для этого вам нужно отредактировать файл ~/.ssh/config
следующим образом:
Host bitbucket.org
User hg
IdentitiesOnly yes
IdentityFile /home/user/.ssh/bitbucket
Host github.com gist.github.com
User git
IdentitiesOnly yes
IdentityFile /home/user/.ssh/github
Файл ~/.ssh/config
должен иметь права доступа 0600 (я не прямо сейчас не помню, обеспечивается ли это SSH или нет, но это, конечно, не повредит).
Вы можете, конечно, также использовать тот же механизм для интерактивных оболочек, поэтому установите такие вещи, как удаленное имя пользователя (если оно отличается от локального), удаленный порт, сокращение имени хоста и т. д. Например:
Host sm
Hostname sphygmomanometer.example.com
User human
Port 2222
Затем вы можете просто запустите
ssh sm
вместо
ssh -p 2222 human@sphygmomanometer.example.com
. Подстановочные знаки также разрешены:
Host *
ControlPath ~/.ssh/ctl-%u-%r-%h-%p
ControlMaster auto
ControlPersist 5m
Подробнее читайте в руководстве.
И последнее, но не менее важное: не "делайте eval 'ssh-agent -s'
вещь". Вопреки распространенному мнению, это имеет серьезные последствия для безопасности. Правильный способ сделать это так:
ssh-agent /bin/bash
ssh-add
(затем введите свои ключевые пароли, когда вам будет предложено). Вот и все, не делайте это ключ за ключом или как-то еще.
Это запускает новую оболочку, в которую загружаются ваши ключи, и когда вы хотите отозвать доступ, вы просто выходите
из этой оболочки. Если вы «сделаете eval 'ssh-agent -s'
вещь», то агенты аутентификации будут работать еще долго после вашего выхода из системы, и они могут (и в конечном итоге будут) использоваться для несанкционированного доступа.
Редактировать: Проведите небольшой эксперимент:
eval $(ssh-agent -s)
pgrep ssh-agent
Никто не убивает этих ssh-agent
, они зависают до следующей перезагрузки
, готовые к использованию последними вредоносными программами.