Цикл DIR через SSH - PullRequest
       6

Цикл DIR через SSH

0 голосов
/ 18 сентября 2018

вход с помощью ssh на удаленный сервер с использованием

ssh user@01.01.03.04 -i /path/to/ppk.key

с последующим запуском

[user@ip-01-01-03.04 ~]$ sudo su - 
[root@ip-01-01-03.04 ~]# for curdir in $(dir /); do echo "fil=$curdir" ; done

Эффективно выводит список всех корневых каталогов:

fil=bin
fil=dev
fil=lib

Но пытается это сделатьс удаленного компьютера, чтобы получить результат локально становится сложно для меня:

ssh user@01.01.03.04 -i /drives/c/pass/keys/MY.ppk "sudo -i -u root bash -c 'for curdir in \$(dir \/); do echo "fil=$curdir" ; done'"

дать:

fil=var
fil=var
fil=var 
(...)

и

ssh user@01.01.03.04 -i /drives/c/pass/keys/MY.ppk "sudo -i -u root bash -c 'for curdir in \$(dir \/); do echo "fil=\$curdir" ; done'"

дать

fil=
fil=
fil=
(...)

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Переменные внутри двойных кавычек расширяются локальной оболочкой, поэтому вам нужно экранировать знаки доллара, как во второй версии.

Кроме того, двойные кавычки внутри двойных кавычек завершают строку, вам нужночтобы избежать их, а также.

Кстати, вам не нужно бежать /.

ssh user@01.01.03.04 -i /drives/c/pass/keys/MY.ppk "sudo -i -u root bash -c 'for curdir in \$(dir /); do echo `"fil=\$curdir`" ; done'"

Записать здесь часто проще с помощью документа здесь:

ssh user@01.01.03.04 -i /drives/c/pass/keys/MY.ppk <<'EOF'
sudo -i -u root bash -c 'for curdir in $(dir /); do echo "fil=$curdir" ; done'
EOF

Помещение одинарных кавычек вокруг токена EOF обрабатывает документ Here-doc как строку в одинарных кавычках, поэтому $ специально не обрабатывается.

0 голосов
/ 18 сентября 2018

Как насчет другого подхода?Вам не нужно быть пользователем root, чтобы вывести из списка /.Таким образом, нет необходимости использовать sudo или ssh для root.Кроме того, поскольку вы действительно хотите получить список / на удаленном сервере, почему бы просто не запустить ssh и запустить команду dir?Цикл может быть локальным.Примерно так?

for curdir in $(ssh localhost dir /); do
    echo "fil=${curdir}"
done

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...