Щорт: -: вход содержит нечетное количество токенов

Итак, вы готовы попробовать альтернативу клиенту OpenSSH?

Рад за вас. lsh www.gnu.org/s/lsh/ - это альтернатива GNU, которая может работать с сервером OpenSSH. К сожалению, это не так просто.

Мы предполагаем, что вы можете ssh на localhost, на котором запущен OpenSSHD. Ваша первая попытка:

$ lsh localhost
No seed file. Please create one by running
lsh-make-seed -o "/home/tange/.lsh/yarrow-seed-file".
lsh: No randomness generator available.

Итак, давайте сделаем этот файл:

$ mkdir .lsh
$ lsh-make-seed -o "/home/tange/.lsh/yarrow-seed-file"
lsh-make-seed: Reading system state...
lsh-make-seed: Got 150 bits of entropy from system state.
lsh-make-seed: Please type some random data. You better do this
lsh-make-seed: when connected directly to a console, typing over
lsh-make-seed: the network provides worse timing information, and
lsh-make-seed: more opportunities for eavesdropping.
----------------------------------------
........................................
lsh-make-seed: Got 182 keystrokes, estimating 200 bits of entropy.
lsh-make-seed: You can stop typing now.

Теперь мне кажется довольно глупым, что lsh не использует... /dev/urandom и возвращается к набору только на системах, в которых нет это.

$ lsh localhost
lsh: Failed to open `/home/tange/.lsh/host-acls' for reading (errno = 2): No such file or directory
lsh: Protocol error: Algorithm negotiation failed.

Это происходит из-за того, что lsh выбирает несовместимый шифр при использовании с последним OpenSSHD. Используйте -c aes256-ctr - я не знаю, почему он не делает это автоматически:

$ lsh -c aes256-ctr localhost
lsh: Failed to open `/home/tange/.lsh/host-acls' for reading (errno = 2): No such file or directory
lsh: Server's hostkey is not trusted. Disconnecting.
lsh: Protocol error: Bad server host key

Лучше, но недостаточно хорошо. Сделав lsh менее параноидальным, вы сможете войти:

$ lsh -c aes256-ctr --sloppy-host-authentication localhost
lsh: Failed to open `/home/tange/.lsh/host-acls' for reading (errno = 2): No such file or directory
Received unauthenticated key for host localhost
Key details:
Bubble Babble: xitem-suten-vedyd-hibuv-naril-nisog-luvet-dagik-negem-kykeb-bexyx
Fingerprint:   4b:9f:4b:4d:10:6b:09:2b:be:ee:df:48:a0:75:d3:9a
Do you trust this key? (y/n) y
Last login: Mon Dec  7 08:11:58 2015 from 192.168.1.103
$ 

Вы можете заставить lsh добавить этот ключ хоста в доверенные ключи хоста:

$ lsh -c aes256-ctr --sloppy-host-authentication --capture-to ~/.lsh/host-acls localhost
Received unauthenticated key for host localhost
Key details:
Bubble Babble: xitem-suten-vedyd-hibuv-naril-nisog-luvet-dagik-negem-kykeb-bexyx
Fingerprint:   4b:9f:4b:4d:10:6b:09:2b:be:ee:df:48:a0:75:d3:9a
Do you trust this key? (y/n) y
Password for tange: 
Last login: Fri Jan  8 12:46:57 2016 from localhost
$ 

И тогда вы сможете использовать lsh с обычным парольным входом:

$ lsh -c aes256-ctr localhost
Password for tange: 
Last login: Fri Jan  8 12:48:36 2016 from localhost
$ 

Для авторизации клиентского ключа, преобразуйте ключ в формат OpenSSH и добавьте его в . ssh/authorized_keys:

$ lsh-keygen | lsh-writekey
xxxxxx
xxxxxx
Enter new passphrase: 
Again: 
$ lsh-export-key --openssh < ~/.lsh/identity.pub | lsh -c aes256-ctr localhost 'cat >>.ssh/authorized_keys'
Passphrase for key `tange@hk': 
Password for tange:

Теперь вы можете использовать ваш ключ lsh для подключения к серверу OpenSSH. Чтобы избежать ввода паролей, не шифруйте ваш клиентский ключ:

$ lsh-keygen | lsh-writekey -c none
xxxxxx
xxxxxx
$ lsh-export-key --openssh < ~/.lsh/identity.pub | lsh -c aes256-ctr localhost 'cat >>.ssh/authorized_keys'
Password for tange: 
$ lsh -c aes256-ctr localhost
Last login: Fri Jan  8 12:48:40 2016 from localhost
$ 
2
17.11.2018, 17:57
2 ответа

Да, tsort читает свои входные данные парами, разделенными любым пробелом, включая символы новой строки.

Итак, пример из документации tsort:

tsort <<EOF
a b c
d
e f
b c d e
EOF

Определяет следующие пары порядков:

  • а < б
  • с < d
  • е < f
  • б < с
  • д < е

Собрав все это вместе, вы получите порядок a < b < c < d < e < f, что в данном случае является полным порядком.

Чтение исходного кода подтверждает, что tsort использует readtoken ()из gnulib с набором разделителей, состоящим из пробела, табуляции и новой строки , другими словами, любой пробел.

(Моя первоначальная интерпретация этого примера tsort, чтобы ответить на ваш другой вопрос , заключалась в том, что строка с b c d eсоздала три неявные пары, b < c, c < d и d < e, но это на самом деле это не так, все пробелы интерпретируются одинаково, включая новые строки, и за раз читается одна пара.)

4
27.01.2020, 21:49

tsort выполняет топологическую сортировку ориентированного графа. Он получает граф в виде пар узлов. Они представляют собой частичное упорядочение графа, а tsortдает вам полное упорядочение, поскольку в результате (может быть более одного полного упорядочения графа, см. документацию для -fи -h. ] опции в системах BSD(недоступны в системах GNU AFAIK )).

Пример реального графа (это пакеты OpenBSD, необходимые для сборки пакета shells/bashв системе OpenBSD):

$ make -C /usr/ports/shells/bash build-dir-depends
shells/bash devel/ccache
shells/bash devel/gettext
devel/gettext devel/ccache
devel/gettext archivers/xz
archivers/xz devel/ccache
devel/gettext converters/libiconv
converters/libiconv devel/ccache
devel/gettext converters/libiconv

Пара A Bв этом списке означает «Aсоединена с B» (в указанном порядке, поскольку это ориентированный граф ), и в конкретном случае, показанном здесь, это означает "Aзависит от B"(converters/libiconvдолжен быть построен до devel/gettext, потому что последний зависит от первого ).

tsortпринимает частичный порядок пар узлов и возвращает список узлов в полном порядке, совместимом с этим частичным порядком:

$ make -C /usr/ports/shells/bash build-dir-depends | tsort -r
devel/ccache
archivers/xz
converters/libiconv
devel/gettext
shells/bash

Здесь я поручил tsortизменить результирующий порядок (невозможно в системах GNU, поскольку -rне является опцией для GNU tsort), что дает мне порядок, в котором система должна собрать пакеты, в то же время соблюдая зависимости между ними (, что заканчивается сборкой окончательного shells/bashпакета ).

Если tsortполучает строку ввода

a b c d

то это то же самое, что и

a b
c d

и как

a b c
d

То есть он всегда считывает узлы графа в парах , независимо от того, разделены ли они пробелами или символами новой строки. Проблема с вашими данными,

a b c
b c d e

заключается в том, что его нельзя прочитать как список пар, так как он содержит нечетное количество узлов.

7
27.01.2020, 21:49

Теги

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