Сценарные манипуляции с открытыми ключами SSH в файле authorized_keys

Обратите внимание, что split не работает, как вы думаете. Он разбивается не на слово, а на любой символ, указанный во второй строке. Например, split «xax» «abc» действительно разделит xax на 2 части, несмотря на то, что он не содержит последовательности abc .

Простой способ разбить строку по заданной подстроке - это, например, использовать команду сначала строка , чтобы найти начало подстроки, затем диапазон строк для копирования вверх до этого момента:

set str $expect_out(buffer)
set v [string range $str 0 [string first "\[root@" $str]-1]

Затем вы можете проверить v на пустоту или нет.

В качестве альтернативы, вместо выполнения expect "~] #" , почему бы не ожидать "\ [root @" , тогда $ expect_out (buffer) будет уже содержат то, что вы хотели извлечь.


Для более ранних версий tcl / expect может потребоваться использовать expr для вычитания 1 из индекса вместо того, чтобы разрешать диапазон строк принимать форму номер-номер. Так что используйте, например:

set v [string range $str 0 [expr [string first "\[root@" $str] - 1]]
1
13.04.2017, 15:13
1 ответ

Судя по вашему описанию, вы хотите убрать опции и строки комментариев. Согласно man 8 sshd :

Открытые ключи состоят из следующих разделенных пробелами полей: параметры, тип ключа, ключ в кодировке base64, комментарий. Поле параметров необязательно. Тип ключа - «ecdsa-sha2-nistp256», «ecdsa-sha2-nistp384», «ecdsa-sha2-nistp521», «ssh-ed25519», «ssh-dss» или «ssh-rsa»; поле комментария ни для чего не используется (но может быть удобным для пользователя для определения ключа).

Следовательно, вы можете сделать что-то вроде этого:

sed '
    /^[ ]*$/d;
    /^#/d;
    s/^.* \(ecdsa-sha2-nistp256\|ecdsa-sha2-nistp384\|ecdsa-sha2-nistp521\|ssh-ed25519\|ssh-dss\|ssh-rsa\) /\1 /' \
        ~/.ssh/authorized_keys

Предполагается, что ключевые комментарии не содержат ssh-dss , ssh-rsa и т. Д. Также предполагается ] sed (1) , поддерживающая ИЛИ (т.е. \ | ).

Использование текстового редактора может оказаться проще и безопаснее. :)

1
27.01.2020, 23:46

Теги

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