Как я мешаю находке убывать в найденные каталоги?

Вам нужен Ваш открытый ключ SSH, и Вам будет нужен Ваш ssh закрытый ключ. Ключи могут быть сгенерированы с ssh-keygen. Закрытый ключ должен быть сохранен на Сервере 1, и открытый ключ должен быть сохранен на Сервере 2.

Это - completly, описанный в странице справочника openssh, таким образом, я заключу многое в кавычки из него. Необходимо считать раздел 'Authentication'. Также openSSH руководство должно быть действительно полезным: http://www.openssh.org/manual.html

Будьте осторожны с ssh, потому что это влияет на безопасность Вашего сервера.

От man ssh:

 ~/.ssh/identity
 ~/.ssh/id_dsa
 ~/.ssh/id_rsa
     Contains the private key for authentication.  These files contain
     sensitive data and should be readable by the user but not acces-
     sible by others (read/write/execute).  ssh will simply ignore a
     private key file if it is accessible by others.  It is possible
     to specify a passphrase when generating the key which will be
     used to encrypt the sensitive part of this file using 3DES.

 ~/.ssh/identity.pub
 ~/.ssh/id_dsa.pub
 ~/.ssh/id_rsa.pub
     Contains the public key for authentication.  These files are not
     sensitive and can (but need not) be readable by anyone.

Это означает, что можно сохранить закрытый ключ в корневом каталоге в .ssh. Другая возможность состоит в том, чтобы сказать ssh через -i переключатель параметра для использования специального файла идентификационных данных. Также от man ssh:

 -i identity_file
     Selects a file from which the identity (private key) for RSA or
     DSA authentication is read.  The default is ~/.ssh/identity for
     protocol version 1, and ~/.ssh/id_rsa and ~/.ssh/id_dsa for pro-
     tocol version 2.  Identity files may also be specified on a per-
     host basis in the configuration file.  It is possible to have
     multiple -i options (and multiple identities specified in config-
     uration files).

Это для закрытого ключа. Теперь необходимо представить открытый ключ на Сервере 2. Снова кавычка от man ssh:

  ~/.ssh/authorized_keys
         Lists the public keys (RSA/DSA) that can be used for logging in
         as this user.  The format of this file is described in the
         sshd(8) manual page.  This file is not highly sensitive, but the
         recommended permissions are read/write for the user, and not
         accessible by others.

Самый легкий путь к achive, который должен скопировать файл в Сервер 2 и добавить его в authorized_keys файл:

scp -p your_pub_key.pub user@host:
ssh user@host
host$ cat id_dsa.pub >> ~/.ssh/authorized_keys

Авторизация через открытый ключ должна быть позволена для ssh демона, видеть man ssh_config. Обычно это может быть сделано путем добавления следующего утверждения к файлу конфигурации:

PubkeyAuthentication yes

24
13.11.2011, 23:46
3 ответа

-prune действие делает find не рекурсивно вызывают в каталог. Можно объединить его с другим действием такой как -exec (порядок -prune и -exec не имеет значения, пока -prune выполняется так или иначе).

find . -name my-search-term -prune -exec find {} … \;

Отметьте то вложение find внутри a find -exec может быть немного проблематичным: Вы не можете использовать -exec во внутреннем find, потому что разделитель рассматривался бы как разделитель внешним find. Можно работать вокруг этого путем вызова оболочки, но остерегаться заключения в кавычки.

find . -name my-search-term -prune -exec sh -c '
    find "$@" … -exec … {\} +
' _ {} +
17
27.01.2020, 19:41
  • 1
    Необходимы круглые скобки в Вашей первой команде? -prune возвращает true и может быть помещен перед -exec. –  rozcietrzewiacz 14.11.2011, 03:01
  • 2
    @rozcietrzewiacz нет, они не необходимы. Привычка к наличию a -o там, я предполагаю. И я предполагаю помещение -prune прежде -exec более читаемо. –  Gilles 'SO- stop being evil' 14.11.2011, 03:03
  • 3
    Спасибо, не использовал -prune опция прежде. –  haridsv 11.02.2015, 09:29
  • 4
    В моем варианте использования, этой команде: mkdir -p x1 x2; touch x1/x11 x1/x12 x2/x21 x2/x22; find . -name 'x1*' -exec rm -rf {} \; дает ошибку: find: ./x1: No such file or directory. Решение состоит в том, чтобы добавить -prune в конце find команда. –  haridsv 11.02.2015, 09:36

- пустые решения -

Если Вы хотите find пропускать содержание найденного каталога, но продолжать искать в других каталогах, использовании -prune как @laebshade предложенный. Полная команда должна затем быть похожей

 find . -type d -name somename -prune -exec ...

С другой стороны, если Вы хотите find полностью прекратить искать и после нахождения первого каталога соответствия, затем что Вы ищете, -quit (доступный начиная с версии 4.2.3 из GNU find). Этот немного более хитер для использования, потому что это делает find выйдите сразу - так -quit должен быть помещен в самый конец команды:

find . -type d -name somename -exec ... -quit

Чтобы это работало как ожидалось, нужно гарантировать что -exec возвращает true (другими словами, нулевое состояние). Если Вы хотите статус выхода -exec быть проигнорированным, так, чтобы -quit всегда работы, Вам нужно немного приема:

find . -type d -name somename \( -exec ... -o -true \) -quit

или

find . -type d -name somename \( -exec ... -o -quit \)

или

find . -type d -name somename \( -exec ... , -quit \) # a comma before -quit

- некоторое объяснение -

Самая важная вещь, о как find работы состоят в том, что все действия ("тесты") рассматривают как логические предикаты, интерпретируемые слева направо. Поэтому последнее действие (например, -quit) будет только выполнен, если целая предыдущая часть не возвращала false. По умолчанию ко всем тестам присоединяются с логическим "И", -o опция изменяет соединение на "ИЛИ".

Хитрый элемент -o это find может "оптимизировать" Вашу команду и не работать -exec часть, если Вы вводите просто

find . -type d -name somename -exec ... -o -quit

Для преодоления этого можно вызвать find оценить все предикаты joned с "ИЛИ", путем включения их в круглых скобках.

6
27.01.2020, 19:41

Не уверен, что это то, что вы ищете, но параметр «maxdepth» не позволит команде find выйти за пределы текущего каталога. Я также думаю, что вы могли бы добавить подстановочный знак к своей находке:

$> find /your/dir -name '*mystring*' -maxdepth 1 -type d -exec my_action {} \;

-name 'mystring ' будет искать все файлы, соответствующие ' mystring '. не обращайте внимания на одинарные кавычки. -maxdepth 1 найти файлы, которые не выходят за пределы текущего каталога. -maxdepth 2 будет искать файлы в текущем каталоге и еще на одном уровне каталогов, и так далее, и тому подобное. -Тип d находит файлы, являющиеся каталогами. -тип f находит обычные файлы и т. д.

Мой 0,02... ^ _^

0
27.01.2020, 19:41

Теги

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