pip常用指令

列出已安装的包

pip freeze or pip list

导出requirements.txt

pip freeze > <目录>/requirements.txt

安装包

在线安装

pip install <包名>pip install -r requirements.txt

通过使用== >= <= > <来指定版本,不写则安装最新版

requirements.txt内容格式为:

APScheduler==2.1.2
Django==1.5.4
MySQL-Connector-Python==2.0.1
MySQL-python==1.2.3
PIL==1.1.7
South==1.0.2
django-grappelli==2.6.3
django-pagination==1.0.7

安装本地安装包

pip install <目录>/<文件名>pip install --use-wheel --no-index --find-links=wheelhouse/ <包名>

<包名>前有空格

可简写为

pip install --no-index -f=<目录>/ <包名>

卸载包

pip uninstall <包名>pip uninstall -r requirements.txt

升级包

pip install -U <包名>

升级pip

pip install -U pip

显示包所在的目录

pip show -f <包名>

搜索包

pip search <搜索关键字>

查询可升级的包

pip list -o

下载包而不安装

pip install <包名> -d <目录>pip install -d <目录> -r requirements.txt

打包

pip wheel <包名>

更换国内pypi镜像

国内pypi镜像

指定单次安装源

pip install <包名> -i http://pypi.v2ex.com/simple

指定全局安装源

在unix和macos,配置文件为:$HOME/.pip/pip.conf
在windows上,配置文件为:%HOME%\pip\pip.ini

[global]
timeout = 6000
  index-url = http://pypi.douban.com/simple

阿里云安装pip镜像配置

阿里云安装pip

在阿里云上使用默认的pip源的时候,经常出现下载很慢,或者有时候出现根本无法下载的情况。只有加载本地的源才行。

pip镜像列表

pip的镜像可以在这里查看 https://pypi-mirrors.org/

可以看到其中已经有了aliyun的镜像,赶紧点进去看看,发现https的是打不开的,只有选择http的。

http://mirrors.aliyun.com/pypi/simple/

访问这个可以进去看看

这里也推荐可以使用pypi.douban.com 豆瓣的或者 其他的。我的直接在阿里云上所以就直接选择阿里云的镜像了,实测也是最快的,下载速度可以到几M

配置pip配置文件

在root目录下创建文件~/.pip/pip.conf

详细的配置如下:

    [global]
    timeout = 6000
    index-url = http://mirrors.aliyun.com/pypi/simple
    [install]
    use-mirrors=true
    mirrors= http://mirrors.aliyun.com
    trusted-host=mirrors.aliyun.com

安装pip包 enjoy~!

Python命令行自动补全和记录历史命令

~$ cat .pythonstartup 
import os    
import readline    
import rlcompleter    
import atexit    
    
    
#tab completion    
readline.parse_and_bind("tab: complete")    
    
    
#history file    
history_file = os.path.join(os.environ["HOME"],".pythonhistory")    
try:    
    readline.read_history_file(history_file)    
except IOError:    
    pass    
atexit.register(readline.write_history_file,history_file)    
    
    
del os,history_file,readline,rlcompleter

.bashrc中追加

export PYTHONSTARTUP=”/root/.pythonstartup”

source .bashrc使之生效

这样Python命令行就支持自动补全和记录历史命令的功能了

CentOS7下Strongswan架设IPSec-IKEv1, IKEv2, L2TP VPN,适用于 IOS9,OSX, Windows, Linux

VPN 隧道协议PPTP、L2TP、IPSec和SSLVPN(SSTP,OpenVPN)中安全性逐级提高,相应的受到墙的干扰相对要弱点,但是现在我们考虑到跨平台,PPTP穿透力及安全性可以忽略,所以这里搭建支持 ikev1/ikev2 的 Ipsec VPN,适用于iOS、Android、Windows 7+ 、MacOS X,及Linux。为了兼容Windows 7以下的系统,同时搭建L2TP/IPSec支持。

More: Strongswan IKEV2免导入证书配置及调试笔记

最后更新时间:2016.04.08 支持IOS9 IKEV2

温馨提示:这种方法不适合架梯子,GFW干扰太强。

同时GFW对https及Shadowsocks也是能检测到,VPS间歇性的Timeout.

安装 StrongSwan

由于Openswan已经没人维护了,所以我们选择更强大的Strongswan.它是一个完整的2.4和2.6的Linux内核下的IPsec和IKEv1 的实现。它也完全支持新的IKEv2协议的Linux 2.6内核。

StrongSwan 的发行版已包含在 EPEL 源中, 但是CentOS源的包比较旧,所以我们手动在官网https://www.strongswan.org/download.html下载安装包,当然你也可以直接源码编译。

wget http://dl.fedoraproject.org/pub/epel/7/x86_64/s/strongswan-5.3.2-1.el7.x86_64.rpm
rpm -ihv strongswan-5.3.2-1.el7.x86_64.rpm

安装依赖:

#CentOS
yum install -y gmp-devel
#debian/ubuntu
apt-get -y install gcc
apt-get -y install make
apt-get -y install install libgmp10 libgmp3-dev libssl-dev pkg-config libpcsclite-dev libpam0g-dev

编译:

wget http://download.strongswan.org/strongswan.tar.gz
tar xzf strongswan.tar.gz
cd strongswan-*
./configure  --sysconfdir=/etc  --enable-openssl --enable-nat-transport --disable-mysql --disable-ldap  --disable-static --enable-shared --enable-md4 --enable-eap-mschapv2 --enable-eap-aka --enable-eap-aka-3gpp2  --enable-eap-gtc --enable-eap-identity --enable-eap-md5 --enable-eap-peap --enable-eap-radius --enable-eap-sim --enable-eap-sim-file --enable-eap-simaka-pseudonym --enable-eap-simaka-reauth --enable-eap-simaka-sql --enable-eap-tls --enable-eap-tnc --enable-eap-ttls
make && make install

这里需要注意下,官方教程编译configure时没有带这么多参数,我实测如果不带参数,安装成功后,在生成证书的时候,ipsec pki –gen 命令将不会成功,也不会提示任何错误。

配置相关证书

每一个完整的 ssl 证书都有一个公钥和一个私钥。公钥是在网络上传输的,而私钥是藏好用来和接收到的公钥配对的(因此私钥里也有整个公钥,用来配对)。

  1. 生成CA证书的私钥,并使用私钥,签名CA证书
    ipsec pki --gen --outform pem > ca.key.pem
    ipsec pki --self --in ca.key.pem --dn "C=CN, O=VPN, CN=StrongSwan CA" --ca --lifetime 3650 --outform pem >ca.cert.pem

    这里C 表示国家名,同样还有 ST 州/省名,L 地区名,STREET(全大写) 街道名。O 表示组织名。CN 为通用名

  2. 生成服务器证书所需的私钥,并用CA证书签发服务器证书
    ipsec pki --gen --outform pem > server.key.pem  
    ipsec pki --pub --in server.key.pem | ipsec pki --issue --lifetime 1200 --cacert ca.cert.pem \
        --cakey ca.key.pem --dn "C=CN, O=VPN, CN=vpn.linsir.org" \
        --san="1.2.3.4" --san="vpn.linsir.org" --flag serverAuth --flag ikeIntermediate \
        --outform pem > server.cert.pem

    第二句是从我们刚生成的私钥里把公钥提取出来,然后用公钥去参与后面的服务器证书签发。

    - iOS 客户端要求 CN 也就是通用名必须是你的服务器的 URL  IP 地址;
    - Windows 7 不但要求了上面,还要求必须显式说明这个服务器证书的用途(用于与服务器进行认证),–flag serverAuth;
    -  iOS  Mac OS X 要求了“IP 安全网络密钥互换居间(IP Security IKE Intermediate)”这种增强型密钥用法(EKU),–flag ikdeIntermediate;
    - Android  iOS 都要求服务器别名(serverAltName)就是服务器的 URL  IP 地址,–san

    所以这里C、O的值要跟第一步的一致,CN值及–san值是服务器公网地址或url,另外这里可以设置多个–san值。否则会出现错误 13801:IKE身份验证凭证不可接受.

3. 生成客户端证书

ipsec pki --gen --outform pem > client.pem
         ipsec pki --pub --in client.pem | ipsec pki --issue --cacert ca.cert.pem \
        --cakey ca.pem --dn "C=CN, O=VPN, CN=VPN Client" \
        --outform pem > client.cert.pem

这里CO的值要跟第一步的一致

 

  1. 生成 pkcs12 证书 pkcs12 证书用来导入手机或电脑的。
    openssl pkcs12 -export -inkey client.pem -in client.cert.pem -name "VPN Client"\
             -certfile ca.cert.pem -caname "vpn.linsir.org"  -out client.cert.p12

安装证书

把证书复制到strongswan目录下。

cp -r ca.cert.pem /etc/strongswan/ipsec.d/cacerts/
cp -r server.cert.pem /etc/strongswan/ipsec.d/certs/
cp -r server.key.pem /etc/strongswan/ipsec.d/private/

配置StrongSwan

设备/操作系统使用的 ike 版本

  • Linux: 命令行客户端就是 strongswan 本身,因此完美兼容,支持 ikev1/ikev2 和所有加密方法的连接。
  • Android: 只支持 ikev1(没有最新andriod手机,可能已经支持ikev2)。
  • iOS/Mac OS X: IPsec 客户端为自己修改的racoon。它只支持 ikev1,最新的IOS 9 Mac OS X 支持ikev2.
  • Windows: 只在 Windows 7 以后支持ikev2, Win XP需要用l2tp方式。

ipsec.conf

vim /etc/strongswan/ipsec.conf

# ipsec.conf - strongSwan IPsec configuration file
# basic configuration
config setup
    uniqueids=never              #允许多个客户端使用同一个证书,多设备同时在线

#所有项目共用的配置项
conn %default
    keyexchange=ike              #ikev1 或 ikev2 都用这个
    left=%any                    #服务器端标识,%any表示任意
    leftsubnet=0.0.0.0/0         #服务器端虚拟ip, 0.0.0.0/0表示通配.
    right=%any                   #客户端标识,%any表示任意

conn IKE-BASE
    ikelifetime=60m
    keylife=20m
    rekeymargin=3m
    keyingtries=1
    leftcert=server.cert.pem     #服务器端证书
    rightsourceip=10.0.0.0/24    #分配给客户端的虚拟 ip 段

# for IOS9 and Win 7 or later
conn ike2-eap
    also=IKE-BASE
    keyexchange=ikev2
    ike=aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=aes256-sha256,aes256-sha1,3des-sha1!
    leftsendcert=always
    leftid=vpn.linsir.org
    leftauth=pubkey
    leftfirewall=yes
    rightauth=eap-mschapv2
    rightsendcert=never
    eap_identity=%any
    rekey=no
    dpdaction=clear
    fragmentation=yes
    auto=add

# for IOS, use PSK key
conn IPSec-IKEv1-PSK
    also=IKE-BASE
    keyexchange=ikev1
    fragmentation=yes
    leftauth=psk
    rightauth=psk
    rightauth2=xauth
    auto=add

# for andriod 
conn IPSec-xauth
    also=IKE-BASE
    leftauth=psk
    leftfirewall=yes
    right=%any
    rightauth=psk
    rightauth2=xauth
    auto=add


# for win xp l2tp,use psk
conn L2TP-PSK
    keyexchange=ikev1
    authby=secret
    leftprotoport=17/1701 #l2tp端口
    leftfirewall=no
    rightprotoport=17/%any
    type=transport
    auto=add

这里说明一下:

ike: Win7 is aes256, sha-1, modp1024; iOS is aes256, sha-256, modp1024; OS X is 3DES, sha-1, modp1024

esp: Win 7 is aes256-sha1, iOS is aes256-sha256, OS X is 3des-shal1 iOS支持的IKE为aes256-sha256-modp1024,OS X为3des-sha1-modp1024,Win7为aes256-sha1-modp1024。

注意ESP的顺序与IKE的一致。leftid@后跟着就是服务器证书的CN(Common Name)也是IOS9设置时的远程ID(Remote ID).

具体配置说明可以参考https://zh.opensuse.org/SDB:Setup_Ipsec_VPN_with_Strongswan官方文档

strongswan.conf

vim /etc/strongswan/strongswan.conf

# strongswan.conf - strongSwan configuration file
#
# Refer to the strongswan.conf(5) manpage for details
#
# Configuration changes should be made in the included files

charon {
    load_modular = yes
    duplicheck.enable = no #是为了你能同时连接多个设备,所以要把冗余检查关闭
    compress = yes
    plugins {
        include strongswan.d/charon/*.conf
    }
    dns1 = 223.5.5.5
    dns2 = 8.8.8.8
    # for Windows WINS Server
    nbns1 = 223.5.5.5
    nbns2 = 8.8.8.8
}

include strongswan.d/*.conf

密码认证文件

# /etc/ipsec.secrets - strongSwan IPsec secrets file


: RSA server.key.pem
: PSK "password"
: XAUTH "password"
vpn %any : EAP "password"
wp设备名称\user : EAP "password"  
# 仅对windowsphone8.1设备,设备名称在`设置-关于-手机信息` 中查看

启动Strongswan

ipsec start 
或者
systemctl start strongswan.service

IKEv1,v2就搭建好了,我们配置L2TP/IPSec

L2TP/IPSec

安装 xl2tpd

yum install ppp xl2tpd

如果提示找不到安装包,我们还可以手动下载安装。

wget http://dl.fedoraproject.org/pub/epel/7/x86_64/x/xl2tpd-1.3.6-8.el7.x86_64.rpm
rpm -ihv xl2tpd-1.3.6-8.el7.x86_64.rpm

/etc/strongswan/ipsec.conf

在/etc/strongswan/ipsec.conf最后添加

conn L2TP-PSK
    keyexchange=ikev1
    authby=secret
    leftprotoport=17/1701 #l2tp端口
    leftfirewall=no
    rightprotoport=17/%any
    type=transport
    auto=add

xl2tpd.conf

vim /etc/xl2tpd/xl2tpd.conf

[global]
ipsec saref = no
#listen-addr = 1.2.3.4
port =1701


[lns default]
ip range = 10.0.1.2-10.0.1.254
local ip = 10.0.1.1
require chap = yes
refuse pap = yes
require authentication = yes
name = vpn
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

这里注意下 ip range不要跟上面的strongswan冲突了,不然会部分上不了网。

options.xl2tpd

vim /etc/ppp/options.xl2tpd

require-mschap-v2
ms-dns 223.5.5.5
ms-dns 223.6.6.6
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
mtu 1400
noccp
connect-delay 5000
debug
logfile /var/log/xl2tpd.log

设置用户名,密码

vim /etc/ppp/chap-secrets

# client    server  secret          IP addresses
vpn         *       admin           *

启动xl2tpd

首先添加文件

vim /usr/lib/systemd/system/xl2tpd.service

[Unit]
Description=Level 2 Tunnel Protocol Daemon (L2TP)
After=syslog.target network.target
After=ipsec.service
# Some ISPs in Russia use l2tp without IPsec, so don't insist anymore
#Wants=ipsec.service

[Service]
Type=simple
PIDFile=/run/xl2tpd/xl2tpd.pid
ExecStart=/usr/bin/xl2tpd -D
Restart=on-abort

[Install]
WantedBy=multi-user.target

然后 执行:

systemctl start xl2tpd

配置转发及防火墙

为转发数据包,我们需要开启内核转发。

编辑/etc/sysctl.conf

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

然后sysctl -p使之生效。

ipatables

iptables -A INPUT -p esp -j ACCEPT
iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
# L2tp
iptables -A INPUT -p udp -m udp --dport 1701 -j ACCEPT
# 转发规则
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o enp7s0f0 -j MASQUERADE

注意 CentOS 网卡名称,我这里是enp7s0f0,而有的是eth0,具体根据实际情况来,另外有多网卡的,需要自己根据实际情况来设置iptables转发规则。

开机启动

systemctl enable xl2tpd
systemctl enable strongswan

客户端配置及连接及测试

win7

导入证书

新建一个内容如下的bat批处理文件,然后把ca.cert.pem放在同一目录下,然后右键管理员运行。

@echo off
@setlocal enableextensions
@set current_dir="%~dp0"
@cd /d "%current_dir%"
@echo %current_dir%
@certutil -addstore root ca.cert.pem
if %ERRORLEVEL% EQU 0 @echo not ok
pause

然后新建vpn即可。

注意:win8 win10 Ikev2有bug tcp/ip协议不能设置属性,关闭远程网关,我的连接上之后,需要自己手动添加路由表。 Win10系统VPN连接IPV4属性无法打开,需要关闭远程网关解决方法

http://www.nicklitten.com/blog/how-fix-windows-10-problem-vpn-failed-initialize-connection-subsystem-cisco-anyconnect

经测试,win8+使用证书登录的穿透性很差,而使用ca证书+EAP账号密码认证,连接速度很快,而且稳定。

iOS/Mac

把 CA 证书发邮件给自己,。在 iOS 上收邮件,导入两者注意是两个证书,一定要导入CA,或者后者不能使用,然后新建 IPSec VPN

在这里可以使用四种方式建立VPN:

  1. IPSec+EAP
    • 服务器是 IP 或都是 URL
    • 账户和密码填 ipsec.secrets 里 EAP 前后的那两个
    • 密钥输入 ipsec.secrets 里设置的 PSK 密码。
  2. IPSec+证书
    • 服务器是 IP 或都是 URL
    • 账户和密码填 ipsec.secrets 里 EAP 前后的那两个(XAUTH的那个密码也行)
    • 勾选使用证书并选择之
  3. L2TP
    • 服务器是 IP 或都是 URL
    • 账户和密码填 etc/ppp/chap-secrets 里的
    • 密钥输入 ipsec.secrets 里设置的 PSK 密码。
  4. IEKV2(IOS9) 首先是导入服务器ca.cert.pem证书,在设置-通用-描述文件中可以查看
    • 类型 IKEv2
    • 服务器是 IP 或都是 URL
    • 远程ID是 IP 或都是 URL
    • 账户和密码填 ipsec.secrets 里 EAP 前后的那两个

Android

IPSec Xauth PSK

IPSec 预共享密钥:写 ipsec.secrets 里 PSK 后面的那个密码.

调试

服务器端的日志就足够检测出绝大多数问题的来源。

tail -f /var/log/strongswan-charon.log
or
tail -f /var/log/syslog #debian
tail -f /var/log/messages #centos

或者直接

journalctl -f

粗暴观察。

扩展

  • FreeRadius:账户认证和计费
  • daloRadius:用户账单管理

遇到的坑:

Dec 16 15:41:53 debian charon: 09[NET] sending packet: from *.*.*.*[4500] to *.*.*.*[4500] (1180 bytes)
Dec 16 15:42:23 debian charon: 13[JOB] deleting half open IKE_SA after timeout

一直报这样子的错误,甚至我重新编译升级StrongSwan5.3.3到5.3.5,放狗搜索半天,https://ttz.im/2015/10/1335 这个哥们成功了,可是我一样的配置还是不行,搞得我都装了个freeRadius来测试了。

最后才发现上次手机刷机之后,ca证书已经不存在了。导入,就成功!

关于freeRadius的可以参考这个链接:

http://freeradius.akagi201.org/index.html

参考链接:

 

linux磁盘满时,如何定位并删除文件

@1.一般情况
一般情况下先df看一下,然后cd到要满的盘,执行:
du -shx *
这样可以列出所有文件夹的大小(x参数会去除掉mount上去的目录,如samba挂上去的盘,这会干扰统计的)
进去如果有子文件夹,那就继续执行du -shx * 一级一级地找
@2.特殊情况(有文件被删除,却被某进程占用,并且还在写)
这种情况的表现是,用1中的方法无法找到占用磁盘的文件,而且du -shx整个盘得到的结果和df的结果差别很大,那肯定是有文件被删除,但被进程占用,而且还在写。这样的被删除文件仍然会占用磁盘,被写入时,空间自然下降了,这种情况用前面的方法是无法找到文件的。
方法:
lsof | grep deleted
这样就可以找到被删除的却还被进程占用的文件了,进程也被列出,把相关的进程重启一遍,空间就被释放了。

Sublime text 3 3103 注册码

Sublime text 3 (Build 3103) license key,these all tested available on 2016/02/10 .Feel free to enjoy them. :idea:

Sublime text 3 (Build 3103) license key

—– BEGIN LICENSE —–
Michael Barnes
Single User License
EA7E-821385
8A353C41 872A0D5C DF9B2950 AFF6F667
C458EA6D 8EA3C286 98D1D650 131A97AB
AA919AEC EF20E143 B361B1E7 4C8B7F04
B085E65E 2F5F5360 8489D422 FB8FC1AA
93F6323C FD7F7544 3F39C318 D95E6480
FCCC7561 8A4A1741 68FA4223 ADCEDE07
200C25BE DBBC4855 C4CFB774 C5EC138C
0FEC1CEF D9DCECEC D3A5DAD1 01316C36
—— END LICENSE ——
—– BEGIN LICENSE —–
Nicolas Hennion
Single User License
EA7E-866075
8A01AA83 1D668D24 4484AEBC 3B04512C
827B0DE5 69E9B07A A39ACCC0 F95F5410
729D5639 4C37CECB B2522FB3 8D37FDC1
72899363 BBA441AC A5F47F08 6CD3B3FE
CEFB3783 B2E1BA96 71AAF7B4 AFB61B1D
0CC513E7 52FF2333 9F726D2C CDE53B4A
810C0D4F E1F419A3 CDA0832B 8440565A
35BF00F6 4CA9F869 ED10E245 469C233E
—— END LICENSE ——
—– BEGIN LICENSE —–
Anthony Sansone
Single User License
EA7E-878563
28B9A648 42B99D8A F2E3E9E0 16DE076E
E218B3DC F3606379 C33C1526 E8B58964
B2CB3F63 BDF901BE D31424D2 082891B5
F7058694 55FA46D8 EFC11878 0868F093
B17CAFE7 63A78881 86B78E38 0F146238
BAE22DBB D4EC71A1 0EC2E701 C7F9C648
5CF29CA3 1CB14285 19A46991 E9A98676
14FD4777 2D8A0AB6 A444EE0D CA009B54
—— END LICENSE ——
—– BEGIN LICENSE —–
Alexey Plutalov
Single User License
EA7E-860776
3DC19CC1 134CDF23 504DC871 2DE5CE55
585DC8A6 253BB0D9 637C87A2 D8D0BA85
AAE574AD BA7D6DA9 2B9773F2 324C5DEF
17830A4E FBCF9D1D 182406E9 F883EA87
E585BBA1 2538C270 E2E857C2 194283CA
7234FF9E D0392F93 1D16E021 F1914917
63909E12 203C0169 3F08FFC8 86D06EA8
73DDAEF0 AC559F30 A6A67947 B60104C6
—— END LICENSE ——

Please support authorized software if you can. :razz:

Download software

Redis安装报错

最近有需求要折腾redis, 记录下过程中遇到的坑

错误描述

安装Redis 时报错:

zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error “Newer version of jemalloc required”
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/data0/src/redis-2.6.2/src’
make: *** [all] Error 2

原因分析

在README 有这个一段话。

Allocator
———

Selecting a non-default memory allocator when building Redis is done by setting
the `MALLOC` environment variable. Redis is compiled and linked against libc
malloc by default, with the exception of jemalloc being the default on Linux
systems. This default was picked because jemalloc has proven to have fewer
fragmentation problems than libc malloc.

To force compiling against libc malloc, use:

% make MALLOC=libc

To compile against jemalloc on Mac OS X systems, use:

% make MALLOC=jemalloc

说关于分配器allocator, 如果有MALLOC 这个 环境变量, 会有用这个环境变量的 去建立Redis。

而且libc 并不是默认的 分配器, 默认的是 jemalloc, 因为 jemalloc 被证明 有更少的 fragmentation problems 比libc。

但是如果你又没有jemalloc 而只有 libc 当然 make 出错。 所以加这么一个参数。

解决办法

make MALLOC=libc

关于wordpress的升级

一直觉得wordpress升级比较恶心,为毛非得搞个ftp呢..

今天抽空研究了下,ftp多半跟跟权限有关

在 wp-config.php 添加如下配置

define(“FS_METHOD”, “direct”);
define(“FS_CHMOD_DIR”, 0777);
define(“FS_CHMOD_FILE”, 0777);

还不妥… 在查下  目录权限不对