Я пытаюсь загрузить удаленный файл с помощью команды 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
}