0

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

该脚本在 OpenWrt 15.05.1 上运行(它使用 BusyBox 来实现 shell 环境)。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
}
4

1 回答 1

0

将/root/.ssh/known_hosts移动到/.ssh/known_hosts后问题已解决

于 2019-05-15T10:31:23.683 回答