2016-01-28 2 views
0

У меня есть скрипт, который запускает ssh-соединение. , поэтому переменная $ssh начнет соединение ssh.Как скопировать echo 'x' в файл во время ssh-соединения

так $SSH имя хоста дает имя хоста, где я схожу. Теперь я пытаюсь что-то повторить и скопировать вывод эха в файл.

SSH = "SSH -tt -i key.pem пользователь @ ec2 инстанции"

Когда я выполнить вручную SSH к хосту и выполнять:

sudo sh -c "echo 'DEVS=/dev/xvdbb' >> /etc/sysconfig/docker-storage-setup" 

это работает. Но когда я выполняю

${SSH} sudo sh -c "echo 'DEVS=/dev/xvdb' > /etc/sysconfig/docker-storage-setup" 

это не похоже на работу.

EDIT: Кроме того, используя тройник работает отлично после выполнения SSH вручную, но не похоже на работу после SSH в script.sh

эхо команды после SSH сценария происходит на моей реальной host (откуда я запускаю скрипт, а не хост, где я выполняю ssh). Таким образом, файл на моем реальном хосте изменяется, а не файл на моем хосте, где я выполнил ssh.

+0

Когда я пытаюсь правильный ответ здесь: http://superuser.com/questions/400714/how-to -remotely-write-to-a-file-using-ssh Я получил разрешение, которое запрещено. (даже если я выполняю sudo) –

+0

Если вы оставите '>' unquoted, вы измените локальный системный файл. Как написано, этого не должно быть. Покажите полученную «ошибку разрешения» и команду, которую вы используете. Также покажите локальный файл до и после. Также запустите 'set -x', а затем запустите команду (используя' sh -cx') и покажите результат. –

ответ

0

Команда передается ssh будет выполняться удаленной оболочкой, так что вам нужно добавить еще один уровень цитирования:

${SSH} "sudo sh -c \"echo 'DEVS=/dev/xvdb' > /etc/sysconfig/docker-storage-setup\"" 

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

echo 'DEVS=/dev/xvdb' | $SSH 'sudo tee /etc/sysconfig/docker-storage-setup' 
+0

Спасибо! Первая команда работает отлично. Второй показывает мне 2 раза DEVS =/dev/xvdb, и он застревает (не знаю, почему сценарий оболочки не идет дальше. Но первая команда работает отлично! –