无法通过os.system('scp(...)')通过初始化脚本启动的python脚本下载文件

时间:2019-05-15 08:46:35

标签: python-2.7 scp openwrt init.d dropbear

我正在尝试使用由cd初始化脚本作为服务启动的Python脚本(scp.py)中由os.system()调用的scp命令下载远程文件。

此脚本在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命令对syslog进行的快速调查显示:

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 :(得分:0)

/root/.ssh/known_hosts 移动到 /。ssh / known_hosts 后,问题得以解决