首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SSH权限被拒绝:在我的烧瓶应用程序中使用paramiko模块,并使用mod_wsgi(Apache)模式部署相同的模块

问SSH权限被拒绝:在我的烧瓶应用程序中使用paramiko模块,并使用mod_wsgi(Apache)模式部署相同的模块
EN

Stack Overflow用户
提问于 2017-10-03 07:15:16
回答 2查看 993关注 0票数 1

Config文件(PetInit.conf):

​

代码语言:javascript
复制
WSGISocketPrefix run/wsgi  
<VirtualHost *:80>  
ServerName xx.xx.xx.xxx  
WSGIScriptAlias / /usr/share/PetInit/PetInit.wsgi  
WSGIDaemonProcess PetInit group=root threads=5 home=/usr/share

<Directory /usr/share/PetInit>
    WSGIScriptReloading On
    WSGIProcessGroup PetInit
    WSGIApplicationGroup %{GLOBAL}
    Order deny,allow
    Allow from all
</Directory>
</VirtualHost>

​

wsgi文件(PetInit.wsgi):

代码语言:javascript
复制
 import sys  
    import logging  
    logging.basicConfig(stream=sys.stderr) 
    sys.path.append("/usr/local/lib/python2.7/site-packages") 
    sys.path.append("/usr/local/lib/python2.7/site-packages/PetInit")  
    from PetInitServer import app as application

应用程序(服务器)代码:

代码语言:javascript
复制
import paramiko
from paramiko import SSHClient  
ssh = paramiko.SSHClient()    
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())     
ssh.connect(remotenodeip,username='root', password='*****',key_filename='/root/.ssh/id_rsa.pub')

服务器日志:

代码语言:javascript
复制
[Tue Oct 03 05:39:45 2017] [error]     ssh.connect(ip,username='root', password='*****',key_filename='/root/.ssh/id_rsa.pub')  
[Tue Oct 03 05:39:45 2017] [error]   File "/usr/lib/python2.6/site-packages/paramiko/client.py", line 290, in connect  
[Tue Oct 03 05:39:45 2017] [error]     sock.connect(addr)  
[Tue Oct 03 05:39:45 2017] [error]   File "<string>", line 1, in connect  
[Tue Oct 03 05:39:45 2017] [error] error: [Errno 13] Permission denied  

注意:如果我在端口5000上启动我的烧瓶应用程序(没有),那么ssh就没有问题了。因此,我怀疑Wsgidaemon进程没有权限。如何允许wsgidaemon进程或任何其他解决此问题的方法??

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-03 22:49:45

Apache下的代码将作为特殊的Apache用户运行,它通常无法访问文件/root/.ssh/id_rsa.pub。另外,由于/root/.ssh目录只能由用户root访问,而通常不能通过组访问设置WSGIDaemonProcess to root的group可能是不够的。运行:

代码语言:javascript
复制
ls -lasd /root/.ssh

并检查目录权限。如果是这样:

代码语言:javascript
复制
 0 drwx------  11 root  root   374 28 Aug 13:02 .

则无法通过组访问。

您不一定要添加组访问,但我认为工具将不接受其中的内容,因为它们可能会验证权限。

因为它只是公钥,而不是私有密钥,所以您可以将其复制到一个可以访问的地方。

您可能希望将守护进程模式进程组作为一个全新的用户运行,而不是Apache用户,因为只有这个新用户能够访问公钥。

票数 1
EN

Stack Overflow用户

发布于 2017-10-04 10:53:49

最后找到了解决方案,并取得了良好的效果。httpd_can_network_connect参数在我的Linux系统中受到限制。

要检查"httpd_can_network_connect“值,请运行以下命令:

/usr/sbin/getsebool -a _ grep "httpd_can_network_connect"

如果输出类似于:

httpd_can_network_connect --> off

然后将值设置为on。

setsebool -P httpd_can_network_connect on

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46539071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档