Fabric-Windows環境-學習筆記

來源:互聯網
上載者:User

軟體環境

機器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 administrator@192.168.8.8,但是還是串連不上

想到也許是防火牆問題,所以把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=['administrator@127.0.0.1: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 git@gitlab.com,可以執行成功;但是執行fab deploy內的run("ssh -T git@gitlab.com")卻會失敗。(還沒有揪出原因)






相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.