Почему команда `cd` не работает через SSH?

Я пытался создать резервную копию некоторых файлов через SSH, но вместо tar ', которые я хотел, я получил свою домашнюю папку. Я провел некоторое дополнительное тестирование, и это сводится к следующему:

ssh [email protected] /bin/sh -c "cd /boot && ls -l"

К моему удивлению перечисляет файлы в /root не /boot. Но если я запустил всю команду /bin/sh из терминала, она правильно cd s и печатает файлы /boot.

Что здесь происходит?

33 голоса | спросил Ambroz Bizjak 27 J0000006Europe/Moscow 2013, 03:33:16

1 ответ


8

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

$ ssh [email protected] /bin/sh -c '"cd /boot && ls -l"'

Это имеет ту же проблему, что и ваша команда:

$ ssh [email protected] /bin/sh -c 'cd /boot && ls -l'

Если вы включите переключатель -v в ssh вы можете видеть, что происходит:

Первая команда:

  

debug1: команда отправки: /bin /sh -c "cd /boot & ls -l"

Вторая команда:

  

debug1: команда отправки: /bin /sh -c cd /boot & & & & & & ls -l

Обычно при отправке команд через ssh вы должны уделять особое внимание цитатам и кавычкам кавычек в кавычках, поскольку различные слои стирают их далеко. Также не беспокойтесь, отправляя /bin/sh.

Вы можете сделать очень полезную вещь, как только понимаете цитату из ssh, например, следующее. Это запустит команду на удаленном сервере, но собирает результаты в файле локально в системе, где вы запустили команду ssh:

$ ssh [email protected] 'free -m' > /tmp/memory.status

или это, где вы создаете каталог на удаленном сервере и создаете его в локальной системе:

$ ssh remotehost 'tar zcvf - SOURCEDIR' | cat > DESTFILE.tar.gz

Ссылки

ответил slm 27 J0000006Europe/Moscow 2013, 04:15:12

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132