Как передать аргументы внутри питона удаленной команде ssh в stdin, stdout, stderr - PullRequest
0 голосов
/ 06 мая 2019

Я подключаюсь к удаленному хосту через SSH, используя paramiko и выполняю несколько простых команд, таких как cd. Во второй команде мне нужно передать аргумент, как показано в примере ниже:

import paramiko 
import os
import shutil
import datetime
import socket
X='ABCDF12'
p=paramiko.SSHClient()
p.set_missing_host_key_policy(paramiko.AutoAddPolicy())
p.connect("example.com",username="tatta",password="abcy1")
print(socket.gethostname())

stdin, stdout, stderr = p.exec_command("cd /bca/scripts;touch $X") 
opt = stdout.readlines()
opt = "".join(opt)
print(opt)

Ожидаемый: ABCDF12
Факт: touch command not working

1 Ответ

2 голосов
/ 07 мая 2019

Я думаю, что ваша проблема в аргументе exec_command(). Попробуйте это:

stdin, stdout, stderr = p.exec_command("sh -c 'cd /bca/scripts; touch {}'".format(X))

Он запускает команды в оболочке (например, cd работает), а {} расширяет переменную X.

...