2015-01-09 94 views
2

我正在嘗試使用Vagrant和Ansible創建開發人員VM環境。我能夠很好地連接並安裝軟件包。我的問題似乎與ssh,git和密鑰文件。我的設置很不幸很複雜,我沒有能力去改變它。 git存儲庫託管在一臺機器上,我必須通過堡壘主機連接到一個密鑰文件。Vagrant,Ansible和SSH轉發

我的本地SSH配置文件具有所有必要的代理命令,使這項工作。我有SSH轉發密鑰,因爲我可以手動登錄到VM並使用git。通過Ansible,它似乎並不知道應該通過ssh配置文件設置的主機。

我沒有運行gdo clone作爲sudo,而我正在使用accept_hostkey。它似乎根本不知道存儲庫主機。

我也嘗試添加ansible.cfg用下面的命令:

ssh_args = -o ControlPersist=15m -F ssh.config -q 

的ssh.config文件是一樣的我的〜/ .ssh/config中做混帳克隆這種情況發生時工作手動。我也是這樣做的手動作爲流浪用戶,並且我的遙控器設置爲在我的手冊中無效。

我只是有點難以理解這應該如何工作。

回答

0

我不太熟悉Ansible,但是從文檔來看,Ansible支持2 ssh transports:OpenSSH,Paramiko(Python的SSH)。 除非你手動選擇使用哪一個,it might choose Paramiko而不是OpenSSH。

這可以解釋您遇到的麻煩,因爲ssh_args是OpenSSH的特定設置。

1

如果我理解正確,你可以手動將它克隆到你的流浪機器中?

如果是,那麼你可以這樣做,因爲你已經告訴我們這兩臺機器有完全相同的〜/ .ssh/config文件,那麼你可以這樣做,這是我在git clone期間做的,當我到了錯誤:

- name: Pull sources from the repository. 
    git: repo='[email protected]:test/test.git' version=master dest=/var/www  accept_hostkey=True force=yes recursive=no key_file=~/.ssh/id_rsa 

有時,明確定義KEY_FILE,accept_hostkey = True和力= YES解決問題。

在另一方面,如果你想明確的定義總是我們的ssh連接代替的paramiko,那麼你可以設置到您的ansible.cfg文件,該文件位於/etc/ansible/ansible.cfg

[defaults] 
transport=ssh 

還有是我在其他地方見過另一種技術,你也可以嘗試請教Ansible談的Git服務器代表你(再次這種變化是在/etc/ansible/ansible.cfg)

[ssh_connection] 
ssh_args = -o ForwardAgent=yes 

希望這會幫助你。謝謝

0

所以問題原來是我實際上運行我的一個git克隆作爲根。

爲了在這種情況下正確轉發SSH密鑰,必須編輯/ etc/sudoers(使用visudo)並更新env_keep,以便保留SSH_AUTH_SOCK。