SSH 使用代理轉發與 Windows 主機作業系統、Vagrant Ubuntu 來賓作業系統和 Keepass/Keeagent
意圖:能夠
lan-example.com
從任何開發環境進行部署;無論是直接來自虛擬作業系統,還是任何單作業系統系統,甚至是使用儲存在 Keepass 中的一個 SSH 密鑰通過網際網路。我目前無法在 Vagrant 的作業系統中執行此操作,除非我明確生成自己的密鑰並在我的每個部署伺服器中對其進行授權。我相信做我想做的事的方法是通過使用者代理轉發,是嗎?主機作業系統
- 視窗 7 x64
- puttygen 生成的 SSH 密鑰:
C:\Users\Administrator\.ssh\id_rsa.ppk
- Keepass 與 Keeagent 儲存我的 SSH 密鑰。Keeagent 設置為“代理”模式
- pageant.exe 已安裝但未執行
- 如果我希望使用我的密鑰連接到外部/內部 LAN 伺服器,Putty 將遵循 Keeagent - Putty 不會將私鑰位置儲存在其配置中。
C:\Users\Administrator.ssh\config
Host 192.168.55.2 ForwardAgent yes
流浪文件
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.network :private_network, ip: '192.168.55.2' config.ssh.forward_agent = true # Why would I need to set this if Keeagent is handling things? config.ssh.private_key_path = '~/.ssh/id_rsa_jake_mitchell.ppk' end
來賓作業系統(Vagrant)
- Ubuntu x64
- 192.168.55.2,只能通過主機訪問
- 中不存在 SSH 密鑰
/home/vagrant/.ssh
(我刪除了它們)。目的是讓使用者代理通過主機作業系統(Keeagent)轉發使用密鑰LAN Web Host(內網網站)
- 假設它的域是
lan-example.com
- 它只允許使用 id_rsa.ppk 公鑰進行 SSH 無密碼登錄
- 192.168.0.2
- 使用者代理轉發在 sshd 中啟用
問題:
工作原理(使用主機作業系統):Putty,
lan-example.com
無需顯式引用 SSH 密鑰即可連接。什麼不起作用(使用來賓作業系統):
ssh -v web-server@lan-example.com
因為它表明沒有任何鍵可以使用。我注意到一些關於Keeagent 測試版的資訊,它允許我設置 SSH_AUTH_SOCK。我已經這樣做了,並設置了一個 NFS 共享,允許來賓作業系統讀取文件;但這並沒有改變任何東西。代理轉發如何在這種類型的環境中工作?導致此失敗的 Windows 有何不同?
通過網路文件系統共享套接字文件是行不通的,因為 Windows 套接字和 Linux 套接字是完全不同的野獸——VM 內部的 Linux 不知道如何使用 Windows 套接字。為了確保虛擬機可以在主機上使用身份驗證代理,需要在 ssh 客戶端和伺服器上啟用代理轉發**,**然後
ssh
通過主機進入虛擬機(而不是直接登錄虛擬機控制台)。假設:
- SSH伺服器代理轉發設置完成,根據原帖(我沒有使用Vagrant所以不知道);
- Keeagent 設置已完成並正在執行(我嘗試過客戶端模式,但在處理非 RSA/DSA 密鑰時存在一些問題,因此代理模式更安全);
在
putty
配置文件設置下,勾選 Connection → SSH → Auth 下的選項“允許代理轉發”,以便為客戶端打開代理轉發。或者,如果在主機上使用 Cygwin ssh,則有 2 種選擇:
- 安裝ssh-pageant並使用 cygwin(in
~/.profile
等)自動啟動。- 在 Keeagent 設置中指定所需的 Windows 套接字文件位置,並將
$SSH_AUTH_SOCK
cygwin 中的變數設置為相應的位置。要檢查代理轉發是否正常工作,請通過 ssh 進入 VM 並檢查變數
$SSH_AUTH_SOCK
。如果它不是空的並且指向一個存在的 Linux 套接字文件,那麼一切都應該沒問題。如果變數為空,則缺少某些內容。