Ошибка вкладыша Perl 1 -не работает -удаление нескольких строк

Why doesn't SSH client in second case offer the public key?

Открытый ключ предлагается клиентом, если он существует (т.е. файл существует и находится в той же папке, что и закрытый ключ с тем же именем + ".pub" ).

This is a mandatory step in key-based authentication, isn't it?

Нет, предлагать открытый ключ необязательно. Обязательным является только доказательство того, что клиент владеет закрытым ключом.
Дополнительные пояснения можно найти здесь :https://security.stackexchange.com/a/152638

Чтобы проиллюстрировать оба случая:

  1. Предложение открытого ключа с последующим подтверждением наличия у клиента закрытого ключа
debug1: Authentications that can continue: publickey,password
debug1: Offering public key: RSA SHA256:3btAL+lsfo8D3Z8PVWLG04j8BqShS2ImfxqwMFPS8BM '.ssh/id_rsa'
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 60
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug2: input_userauth_pk_ok: fp SHA256:3btAL+lsfo8D3Z8PVWLG04j8BqShS2ImfxqwMFPS8BM
debug3: sign_and_send_pubkey: RSA SHA256:3btAL+lsfo8D3Z8PVWLG04j8BqShS2ImfxqwMFPS8BM
debug3: send packet: type 50
debug3: receive packet: type 52
debug1: Authentication succeeded (publickey).
  1. Только подтвержденный клиент имеет закрытый ключ
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: '.ssh/id_rsa'
debug3: sign_and_send_pubkey: RSA SHA256:3btAL+lsfo8D3Z8PVWLG04j8BqShS2ImfxqwMFPS8BM
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 52
debug1: Authentication succeeded (publickey).

Обратите внимание, что если открытый ключ с именем .ssh/SD.pubсуществует и НЕ связан с закрытым ключом.ssh/SD(из-за предыдущей генерации ключа, например ), соединение не будет установлено. Согласно журналу, предоставленному ОП, здесь это не так, но это проблема, с которой я столкнулся, когда дошел до этого вопроса. В этом случае журнал на стороне клиента выглядит следующим образом (и не содержит явных сведений о том, почему авторизация не удалась):

debug1: Next authentication method: publickey
debug1: Offering public key: RSA SHA256:p5eJ+CJ1aRR9xeEcQUDCkbnQ3VUxa8cxjlWUhsYfla4 '.ssh/id_rsa'
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password
0
12.05.2021, 01:42
1 ответ

Если вы хотите изменить содержимое /tmp/file, вместо того, чтобы просто отображать измененный вывод на стандартном выводе, вам нужно использовать параметр perl's -iдля редактирования "в -месте" файл. См. man perlrunи найдите -iдля получения подробной информации.

Кроме того, указывайте свои переменные в кавычках при их использовании (например.$host).

Кстати, вы меняете два разных шаблона на одно и то же значение — пробел. Для этого не нужны две отдельные операции s///.

ssh "root@$host" perl -p -i -e 's/value1|value2/ /' /tmp/file

Даже если вам нужны две разные операции, вы можете разделить их двоеточием -с запятой(;).

ssh "root@$host" perl -p -i -e 's/value1/foo/;s/value2/bar/' /tmp/file

Если вы хотите сделать резервную копию исходного файла, -iпринимает необязательный суффикс. например.

ssh "root@$host" perl -p -i.bak -e 's/value1|value2/ /' /tmp/file

/tmp/fileбудет скопировано в /tmp/file.bakперед редактированием perl.


Вы могли бы сделать это так же легко и немного быстрее (, вероятно, незаметно, если не запускать много раз в цикле )с sed, который также имеет эквивалентную опцию -i.

Изman sed:

-i[SUFFIX], --in-place[=SUFFIX]

edit files in place (makes backup if SUFFIX supplied)

ssh "root@$host" sed -i -e 's/value1\|value2/ /' /tmp/file

или с опцией sed -Eдля расширенных регулярных выражений (ERE)

ssh "root@$host" sed -i -E -e 's/value1|value2/ /' /tmp/file

Кстати, вы можете разделить несколько команд sed с помощью ;, как и в perl.

2
28.07.2021, 11:33

Теги

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