Не удается отправить пароль с помощью команды ssh, неправильная ошибка пароля

У меня есть сценарий, который выполняет разные вещи, и среди них он запрашивает у пользователя пароль, сохраняет его в параметре $password и выполняет эту команду:

ssh [host] 'cd someDir; echo "$password" | sudo -u nobody -S <command>'

Проблема в том, что я получаю сообщение об ошибке. Sorry, try again а затем соединение будет убито.

Как я могу выполнить команду sudo с помощью ssh? Он работает, если я сначала подключился к удаленному хосту, а затем запустил echo 'password_string' | sudo -u nobody -S <command> echo 'password_string' | sudo -u nobody -S <command>

Вы должны попробовать отладки / устранения неполадок. Измените текущую команду ssh на

  ssh host 'cd someDir ;  echo "Пароль $ password" 

Ты получишь

  Пароль - 

Теперь попробуйте

  echo host 'cd someDir ;  echo "Пароль $ password" 

Ты получишь

  host cd someDir ;  echo "Пароль $ password" 

В вашей команде ssh у вас есть $password окруженный двойными кавычками и окруженный одинарными кавычками. Ну, это превращает двойные кавычки в простые, обычные символы – не более синтаксически значимые, чем если бы вы набрали LDQ и LDQ – поэтому $password эффективно завернут в одинарные кавычки. Таким образом, $password отправляется на удаленный хост, а не значение $password (то есть фактический пароль). Затем оболочка на удаленном узле пытается развернуть $password на значение, и ничего не получает, потому что эта переменная не была установлена ​​в этой оболочке.

Команда, которая может работать

  ssh host 'cd someDir ;  echo "" "$ password" '"|  sudo -u nobody -S command ' 

Давайте рассмотрим это, добавив пространства для иллюстрации / ясности:

  ... '...;  echo "" "$ password" '"|  sudo ... ' 

Это все еще имеет двойные кавычки внутри одинарных кавычек. Но, указав буквальную двойную кавычку (после echo ), она вырывается из одинарных кавычек , поэтому переменная расширения / замены может возникать в локальной команде. Тогда у нас есть $password в двойных кавычках. Затем мы возвращаемся в одинарные кавычки для второй буквальной двойной кавычки, вертикальной полосы ( | ) и команды sudo .

Предостережение: в настоящее время у меня нет доступа к хосту, в который я могу войти, поэтому я не полностью его протестировал.