使用SSH与应用程序服务器时libcrypto.so中的Segfault

问题描述 投票:0回答:1

简单的Flask应用程序在远程服务器上执行hostname并返回结果。唯一安装的软件包是parallel-sshFlask(下面的pip冻结)。

最后2行可以像普通脚本一样运行它。

from flask import Flask
from pssh.clients.native.single import SSHClient

application = Flask(__name__)


@application.route('/')
def index():
    username = 'foo'
    password = 'bar'
    command = 'hostname'
    client = SSHClient('127.0.0.1', user=username, password=password)
    run = client.run_command(command)
    _, _, stdout, _, _ = run
    return '\n'.join(list(stdout))


if __name__ == '__main__':
    print(index())

当我使用flask run或普通脚本运行它时一切正常:

(venv) foo@watchtower segfault $ python crash.py
watchtower

(venv) foo@watchtower segfault $ export FLASK_APP=crash

(venv) foo@watchtower segfault $ flask run &
 * Serving Flask app "crash"
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

(venv) foo@watchtower segfault $ http localhost:5000
127.0.0.1 - - [13/Feb/2019 09:44:33] "GET / HTTP/1.1" 200 -
HTTP/1.0 200 OK
Content-Length: 10
Content-Type: text/html; charset=utf-8
Date: Wed, 13 Feb 2019 06:44:33 GMT
Server: Werkzeug/0.14.1 Python/3.6.7

watchtower

(venv) foo@watchtower segfault $

但是在应用程序服务器(Unit,uWSGI)中运行它会导致分段错误:

root@watchtower:~# curl --unix-socket /var/run/control.unit.sock localhost/config -s | jq
{
  "listeners": {
    "*:9002": {
      "application": "segfault"
    }
  },
  "applications": {
    "segfault": {
      "type": "python 3.6",
      "module": "crash",
      "processes": 1,
      "path": "/home/foo/python/segfault/",
      "home": "/home/foo/python/segfault/venv/",
      "user": "foo",
      "group": "foo"
    }
  }
}

foo@watchtower segfault $ http localhost:9002 --timeout 5
http: error: Request timed out (5.0s).

foo@watchtower segfault $ tail /var/log/syslog
Feb 13 09:51:14 watchtower systemd[1]: Starting NGINX Unit...
Feb 13 09:51:14 watchtower unitd[12504]: 2019/02/13 09:51:14 [info] 12504#12504 unit started
Feb 13 09:51:14 watchtower systemd[1]: Started NGINX Unit.
Feb 13 09:51:19 watchtower  v1.7.1 [/usr/sbin/unitd --log /var/log/unit.log --pid /run/unit.pid]: [alert] 12513#12513 process 12537 exited on signal 11
Feb 13 09:51:19 watchtower kernel: [436188.269128] unitd[12555]: segfault at 10 ip 00007f06515f3205 sp 00007f06479b2d28 error 6 in libcrypto.so.1.1[7f06514a7000+24d000]

foo@watchtower segfault $

环境:

(venv) foo@watchtower segfault $ uname -a
Linux watchtower 4.15.0-45-generic #48-Ubuntu SMP Tue Jan 29 16:28:13 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

(venv) foo@watchtower segfault $ openssl version
OpenSSL 1.1.0g  2 Nov 2017

(venv) foo@watchtower segfault $ python -m pip freeze
asn1crypto==0.24.0
bcrypt==3.1.6
cffi==1.11.5
Click==7.0
cryptography==2.5
Flask==1.0.2
gevent==1.4.0
greenlet==0.4.15
itsdangerous==1.1.0
Jinja2==2.10
MarkupSafe==1.1.0
parallel-ssh==1.9.1
paramiko==2.4.2
pkg-resources==0.0.0
pyasn1==0.4.5
pycparser==2.19
PyNaCl==1.3.0
six==1.12.0
ssh2-python==0.17.0
Werkzeug==0.14.1

(venv) foo@watchtower segfault $

也是strace:https://pastebin.com/NMHFqizC

python flask ssh segmentation-fault wsgi
1个回答
0
投票

这里类似的错误。 parallel-ssh + flask + uWSGI = !!! uWSGI进程14获得了分段错误!

uwsgi(uwsgi_backtrace+0x35) [0x5575850f5a45]
uwsgi(uwsgi_segfault+0x23) [0x5575850f5df3]
/lib/x86_64-linux-gnu/libc.so.6(+0x33060) [0x7ff7adafe060]
/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1(EVP_MD_CTX_clear_flags+0x5) [0x7ff7aecf9cd5]
/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1(EVP_DigestInit_ex+0x1d) [0x7ff7aecea51d]
/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1(HMAC_Init_ex+0x10f) [0x7ff7aed00fcf]
/usr/local/lib/python3.6/site-packages/ssh2/.libs/libssh2-71649126.so.1.0.1(+0x23144) [0x7ff79b8e2144]
/usr/local/lib/python3.6/site-packages/ssh2/.libs/libssh2-71649126.so.1.0.1(_libssh2_transport_send+0x43e) [0x7ff79b8f6359]
/usr/local/lib/python3.6/site-packages/ssh2/.libs/libssh2-71649126.so.1.0.1(+0x2d9d5) [0x7ff79b8ec9d5]
/usr/local/lib/python3.6/site-packages/ssh2/.libs/libssh2-71649126.so.1.0.1(libssh2_session_handshake+0x2e) [0x7ff79b8ecbab]
/usr/local/lib/python3.6/site-packages/ssh2/session.cpython-36m-x86_64-linux-gnu.so(+0x948f) [0x7ff79ab9a48f]
/usr/local/lib/libpython3.6m.so.1.0(_PyCFunction_FastCallDict+0xf5) [0x7ff7ae178915]
/usr/local/lib/libpython3.6m.so.1.0(+0x166d51) [0x7ff7ae208d51]
/usr/local/lib/libpython3.6m.so.1.0(_PyEval_EvalFrameDefault+0x3195) [0x7ff7ae20c735]
/usr/local/lib/libpython3.6m.so.1.0(+0x16699c) [0x7ff7ae20899c]
/usr/local/lib/libpython3.6m.so.1.0(_PyFunction_FastCallDict+0x12c) [0x7ff7ae21108c]
/usr/local/lib/libpython3.6m.so.1.0(_PyObject_FastCallDict+0x16e) [0x7ff7ae11529e]
/usr/local/lib/libpython3.6m.so.1.0(_PyObject_Call_Prepend+0xbd) [0x7ff7ae11538d]
/usr/local/lib/libpython3.6m.so.1.0(PyObject_Call+0x47) [0x7ff7ae115047]
/usr/local/lib/libpython3.6m.so.1.0(_PyEval_EvalFrameDefault+0x4064) [0x7ff7ae20d604]
/usr/local/lib/libpython3.6m.so.1.0(+0x165f30) [0x7ff7ae207f30]
/usr/local/lib/libpython3.6m.so.1.0(_PyFunction_FastCallDict+0x347) [0x7ff7ae2112a7]
/usr/local/lib/libpython3.6m.so.1.0(_PyObject_FastCallDict+0x16e) [0x7ff7ae11529e]
/usr/local/lib/libpython3.6m.so.1.0(_PyObject_Call_Prepend+0xbd) [0x7ff7ae11538d]
/usr/local/lib/libpython3.6m.so.1.0(PyObject_Call+0x47) [0x7ff7ae115047]
/usr/local/lib/python3.6/site-packages/greenlet.cpython-36m-x86_64-linux-gnu.so(+0x35cf) [0x7ff7a91175cf]
/usr/local/lib/python3.6/site-packages/greenlet.cpython-36m-x86_64-linux-gnu.so(+0x2f76) [0x7ff7a9116f76]
/usr/local/lib/python3.6/site-packages/greenlet.cpython-36m-x86_64-linux-gnu.so(+0x3e13) [0x7ff7a9117e13]
/usr/local/lib/libpython3.6m.so.1.0(_PyCFunction_FastCallDict+0x194) [0x7ff7ae1789b4]
/usr/local/lib/libpython3.6m.so.1.0(+0x166d51) [0x7ff7ae208d51]
/usr/local/lib/libpython3.6m.so.1.0(_PyEval_EvalFrameDefault+0x3195) [0x7ff7ae20c735]
/usr/local/lib/libpython3.6m.so.1.0(+0x165f30) [0x7ff7ae207f30]
/usr/local/lib/libpython3.6m.so.1.0(_PyFunction_FastCallDict+0x347) [0x7ff7ae2112a7]
/usr/local/lib/libpython3.6m.so.1.0(_PyObject_FastCallDict+0x16e) [0x7ff7ae11529e]
/usr/local/lib/libpython3.6m.so.1.0(_PyObject_Call_Prepend+0xbd) [0x7ff7ae11538d]
/usr/local/lib/libpython3.6m.so.1.0(PyObject_Call+0x47) [0x7ff7ae115047]
/usr/local/lib/libpython3.6m.so.1.0(+0x1bb392) [0x7ff7ae25d392]
/usr/local/lib/libpython3.6m.so.1.0(+0x1b4af7) [0x7ff7ae256af7]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x7494) [0x7ff7afc37494]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x3f) [0x7ff7adbb3acf]
*** end of backtrace ***

你解决了吗?

编辑:

使用from pssh.clients.miko.single import SSHClient似乎工作

© www.soinside.com 2019 - 2024. All rights reserved.