Попробуйте выполнить отладку/устранение неполадок. Измените текущую команду ssh на
ssh host 'cd someDir; echo "The password is $password"'
Вы получите
The password isТеперь попробуйте
echo host 'cd someDir; echo "The password is $password"'Ты получишь
host cd someDir; echo "The password is $password"
В вашей команде ssh у вас есть $password
в двойных кавычках, и окружен одинарными кавычками вокруг этого. Ну, это превращает двойные кавычки в простые, обычные символы — не более синтаксически значимо, чем если бы вы набрали LDQ
и RDQ
— поэтому $password
эффективно заключен в одинарные кавычки. Итак, $password
отправляется на удаленный хост, а не значение из $password
(, т. е. фактический пароль ). Затем оболочка на удаленном хосте пытается расширить $password
до значения, и он ничего не получает, потому что эта переменная не была установлена в этой оболочке.
Может работать команда
ssh host 'cd someDir; echo "'"$password"'" | sudo -u nobody -S command'
Давайте рассмотрим это, добавив пробелы для иллюстрации/ясности:
… '…; echo "' "$password" '" | sudo …'
Это по-прежнему содержит двойные кавычки внутри одинарных кавычек. Но,после указания буквальной двойной кавычки (после echo
), он выходит из одинарных кавычек , поэтому расширение/замена переменных может происходить в локальной команде. Затем у нас есть $password
в двойных кавычках. Затем мы возвращаемся к одинарным кавычкам для второй буквальной двойной кавычки, вертикальная полоса(|
)и команда sudo
.
Внимание :В настоящее время у меня нет доступа к хосту, к которому я могу подключиться по ssh, поэтому я не проверял это полностью.
В конце концов... Я поменял оперативную память, о которой идет речь, на другую машину. Там тоже мертво. Кажется, это была проблема с физическим оборудованием. Каким-то образом я, должно быть, поджарил его, когда менял SSD? Странный. Спасибо за помощь!