SCP через Python Subprocess Popen: «Идентификационный файл недоступен» - PullRequest
0 голосов
/ 30 апреля 2018

При выполнении SCP из subprocess.popen я получаю сообщение об ошибке: Warning: Identity File ./id_rsa.key not accessible: no such file or directory. Проблема описана ниже.

Я хочу передать SCP файл с локального компьютера на удаленный компьютер, используя скрипт python, и я хочу указать ключ, который будет использоваться при выполнении SCP (с использованием опции -i).

Мой локальный компьютер - Windows 10 Enterprise. Моя «удаленная» машина в настоящее время является контейнером Docker с Alpine Linux на моем локальном хосте.

Когда я запускаю команду в командной оболочке с повышенными правами, она работает:

scp -i ./id_rsa.key -P 2222 ./test.plan root@127.0.0.1:/go/

Когда я выполняю команду через Python 3.6 subprocess.popen:

SSH = subprocess.Popen(['scp', '-i ./id_rsa.key', '-P 2222', './test.plan', 'root@127.0.0.1:/go/'],
    cwd = r'C:\ThePathToThisStuff',
    shell = False,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE
)

Он запрашивает у меня пароль, root@127.0.0.1's password:, и когда я ввожу пароль, выдается следующее сообщение об ошибке, указывающее, что он не может найти ключ RSA:

<_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf-8'> ERROR: [b'Warning: Identity file  ./id_rsa.key not accessible: No such file or directory.\n']

Я пытался указывать абсолютные пути к ключам, разделяя каждую команду в списке аргументов на параметры и значения, различные группировки и т. Д.

1 Ответ

0 голосов
/ 30 апреля 2018

Не следует объединять опцию и ее аргумент в одном и том же параметре, они должны быть отдельными элементами списка.

SSH = subprocess.Popen(['scp', '-i', './id_rsa.key', '-P', '2222', './test.plan', 'root@127.0.0.1:/go/'],
...