Fabric-Windows环境-学习笔记

软件环境

机器A:Win7x64 (192.168.8.8):

python2.7 + fabric 最新

django

FreeSSHd (SSH用户名为:administrator,NT认证,该windows用户密码为abc)

putty(验证ssh连接)


机器B:

linux

git服务器


机器C:

linux

ssh

验证用


------------------------------------------------------


fab官网教程:

http://docs.fabfile.org/en/1.10/tutorial.html



1、fab官网教程用到了一个django项目

因为手头没有现成的django项目,所以只好用了最新django官方教程,

https://docs.djangoproject.com/en/1.8/intro/tutorial01/


先搭建了一个。django官方教程写的很好,很容易上手,很容易就运行起来了。

只是fab官网用到的tests.py,需要自己写一两个简单的testcase


因此,fab官网教程中,所有命令用到的my_app之处都需要改为polls

2、fab deploy连接本地服务器遇到了一系列问题:

问题1:

由于原来例子里面没有写env,所以会提示连接哪个host,我输入了localhost,结果报错:

Low level socket error connecting to host localhost


排查过程:

(1) 本机用putty连localhost没有问题


(2) 登录机器C(linux),

执行ssh 192.168.8.8时,会尝试用机器C的当前用户名连接,所以无法成功

因此,改为执行ssh [email protected],但是还是连接不上

想到也许是防火墙问题,所以把python.exe, fab.exe,freesshd 以及tcp 22端口都通过防火墙,

这时,机器C上ssh连接192.168.8.8,ok了,

但是在本机上,fab代码仍然报底层Low level socket error,问题仍然存在


(3)

联想到以前有的web应用也发生过不认localhost,只认127.0.0.1,或者反过来的情况,

所以fab代码中,开头部分增加env定义,不用localhost,而用127.0.0.1

env.hosts=['[email protected]:22']
env.user='administrator'
env.password='abc'

问题1解决。


参考资料:

http://stackoverflow.com/questions/1469431/why-am-i-receiving-a-low-level-socket-error-when-using-the-fabric-python-library


问题2:

Unable to execute command or shell on remote system: Failed to Execute process

ssh连接上本机以后,无法执行windows命令,报以上错误


这个问题,前人经过细致研究后的结论是,在windows上,默认fab也试图执行bash命令,所以需要重定义shell

因此在fab代码中,开头部分继续增加


env.shell="cmd /c"


问题2解决。


参考资料:

http://stackoverflow.com/questions/22504784/fabric-cannot-execute-remote-command-on-windows

http://stackoverflow.com/questions/14863659/paramiko-not-executing-command-or-shell-python


问题3:

with cd()语句 不工作:


code_dir="H:\mydjango"

#code_dir="/h/mydjango"

with cd(code_dir):

    run(“dir”)


结果发现,列出的总是C:\windows\system32的内容,搜了一圈,也没有找到解决方案


只好放弃with cd(),改为直接执行


run("H:" +  " && " + "cd " +code_dir+  " && " + “dir")

这样才列出了正确的内容


之后,deploy可以登录127.0.0.1了,但是执行git clone命令,总是报错ssh有问题

继续发现,原来在win7下,以正常方式执行git命令时,git bash自带的ssh用到了~/.ssh/id_rsa.pub和id_rsa文件,其中pub文件早就预先提交给了gitlab服务器


而ssh登录本机后,其实不再是正常方式执行git命令,而是到了freesshd自己的小环境,所以用的是fresshd自己带的ssh,

可是似乎freesshd自带的ssh并没有读~/.ssh/id_rsa.pub和id_rsa文件,但是它自己的配置也没有地方做相关配置,它自己的配置目录配的只有它自己的私有钥匙。

所以,我觉得freesshd似乎功能不全,或者是我理解不到位。


所以只好放弃FreeSSHd这条路。


因而改用OpenSSH for windows

遇到了一些莫名其妙的问题:run某些命令时,命令最后莫名其妙地多加了个空格(0x20字符),导致命令执行失败。(还没有揪出原因)

OpenSSH 的配置目录下可以设置公有钥匙,因此以putty登录本机,执行ssh -T [email protected],可以执行成功;但是执行fab deploy内的run("ssh -T [email protected]")却会失败。(还没有揪出原因)






你可能感兴趣的:(Python,Windows,Fabric)