У меня есть команда sed, которую мне нужно выполнить через SSH.Я пишу на Python, используя Paramiko для SSH.Соединение работает и команда sed тоже.Моя проблема, когда я пытался объединить их: мне нужно использовать sed как sudo (команда sudo работает, я протестировал ее с другой командой).Вот что у меня есть:
session.exec_command("sudo bash -c \"" + """sudo sed -i "s/\"hostname\":" *"\".*\"/\"hostname\":" *"\"adddvariable\"/" /home/frappe/frappe-bench/sites/test-dev.site1.local/site_config.json""" + "\"")
Проблема в том, что когда эта команда запускается, sed считается 'незаконченной', я получаю:
sed: -e выражение # 1, char 11: неопределенная команда `s '
Я думаю, это может быть связано с пробелами в команде sed?Я понятия не имею, как решить это.Я новичок в Python, Paramiko и SSH.Кто-нибудь знает, как это исправить?
Вот полный код, если это поможет:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(
hostname=server_address,
username=server_username,
key_filename=server_key_file
)
session = ssh.get_transport().open_session()
session.set_combine_stderr(True)
session.get_pty()
session.exec_command("sudo bash -c \"" + """sudo sed -i "s/\"hostname\":" *"\".*\"/\"hostname\":" *"\"adddvariable\"/" /home/frappe/frappe-bench/sites/test-dev.site1.local/site_config.json""" + "\"")
stdin = session.makefile('wb', -1)
stdout = session.makefile('rb', -1)
stdin.flush()
frappe.msgprint(_(stdout.read().decode("utf-8"))) # same as print(stdout.read().decode("utf-8"))