Не удается загрузить файл через os.system ('scp (...)'), в то время как скрипт python запускается через скрипт init - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь загрузить удаленный файл с помощью команды scp, вызванной os.system () в скрипте Python (scp.py), запущенном как служба сценарием инициализации procd.

Этот скрипт выполняется в OpenWrt 15.05.1 (который использует BusyBox для реализации среды оболочки).Сам SCP обрабатывается с помощью dropbear SSH (https://matt.ucc.asn.au/dropbear/dropbear.html)

Код довольно прост:

import os
import logging


logging.basicConfig(level=logging.DEBUG, filename='/usr/local/www/log/scp_test.log', filemode = 'w')

rc = os.system('scp -i /root/.ssh/id_rsa root@vps500141.ovh.net:/root/simon/test /tmp/hello')

error_code, signal = rc >> 8, rc & 0xFF

logging.debug('error_code -> {}'.format(error_code))
logging.debug('signal -> {}'.format(signal))

При запуске в терминале с помощью команды "python scp.py", поведение программыхорошо. Загрузка прошла успешно и выдает следующий вывод:

root@S096C08:/usr/local/bin# python scp.py
test                                           100%   24     0.0KB/s   00:00
root@S096C08:/usr/local/bin# cat /usr/local/www/log/scp_test.log
DEBUG:root:error_code -> 0
DEBUG:root:signal -> 0

Но эта программа не может ничего загрузить при запуске в качестве службы с помощью команды /etc/init.d/scp_test start

root@S096C08:/usr/local/bin# /etc/init.d/scp_test start
root@S096C08:/usr/local/bin# cat /usr/local/www/log/scp_test.log
DEBUG:root:error_code -> 1
DEBUG:root:signal -> 0

Кроме того, быстрое исследование системных журналов с использованием команды logread показывает следующее:

Wed May 15 10:24:58 2019 daemon.err python[3156]: Host 'vps500141.ovh.net' is not in the trusted hosts file.
Wed May 15 10:24:58 2019 daemon.err python[3156]: (ssh-rsa fingerprint md5 41:aa:2b:57:48:be:01:81:48:a3:d0:ac:b6:56:16:34)
Wed May 15 10:24:58 2019 daemon.err python[3156]: Do you want to continue connecting? (y/n)
Wed May 15 10:24:58 2019 daemon.err python[3156]: /usr/bin/dbclient: Connection to root@vps500141.ovh.net:22 exited: Didn't validate host key

vps500141.ovh.net уже имеет запись в /root/.ssh/known_hosts, так что это довольно удивительночто он не найден во время работы скрипта.

Я также пытался добавить опцию "-o StrictHostKeyChecking = no" в команду scp, но, похоже, она тоже не работает.

Примечание: это содержимое сценария инициализации /etc/init.d/scp_test

#!/bin/sh /etc/rc.common
# Copyright (C) 2015 CZ.NIC z.s.p.o. (http://www.nic.cz/)

START=99
STOP=0

USE_PROCD=1
SCRIPT="/usr/local/bin/scp.py"

start_service() {
        procd_open_instance
        procd_set_param user root
        procd_set_param command python "$SCRIPT"
        procd_set_param stderr 1
        procd_close_instance
}

1 Ответ

0 голосов
/ 15 мая 2019

Проблема решена после перемещения / root / .ssh / known_hosts в /. Ssh / known_hosts

...