透過 ForwardAgent ,在遠端機器上,使用本機 ssh key 進行驗證
原來在 VS Code 裡使用 Remote SSH 的時候,是在遠端機器上生成 ssh key,然後把每一個遠端伺服器的 ssh public key 新增到 git 服務裡面去。這樣在 git 服務那裡就會攢起一堆 key (因為伺服器還挺多)。
最近忽然不想使用遠端機器上的(預設) key 了,因為遠端機器一般都是多人共享的。有時候,甚至大家用的都是同一個賬戶。我本來是想在遠端機器上生成一個私有的 key (加上 passphrase),然後用 ssh-agent 管理。但是嘗試了很久,發現 VS Code 好像很難用到一個“全域性”的 ssh-agent。所以似乎不太可行。
在查詢解決方案的過程中,忽然發現了另外一種途徑,ForwardAgent。
ForwardAgent
ForwardAgent 是 ssh 的一個特性,可以讓 ssh-agent 在本地機器上執行,並且把本機的 ssh-agent 代理到遠端機器上。這樣,遠端機器就可以使用本機的 ssh key 了。
這樣,就不需要使用遠端機器上的 ssh key 了,與不需要為每一個伺服器單獨在 git 服務上新增 key 了。
配置
本機
本機上首先得啟動 ssh-agent,並且把 key 新增到 ssh-agent 中(ssh-add)。(這個就不細說了,不同系統也不太一樣。可以看一下這個,裡面其實也有對 ForwardAgent 的介紹。)
然後需要修改一下本機的 ssh 配置檔案。一般 Windows 在 C:\Users\<使用者名稱>\.ssh\config
,Linux 在 ~/.ssh/config
。沒有就建立一個。
在配置檔案中新增以下內容:
Host 遠端機器地址
ForwardAgent yes
或者偷懶的話,也可以直接寫:
Host *
ForwardAgent yes
這樣可以對所有的遠端機器都啟用 ForwardAgent。
之後,新建立的 ssh 連線裡都會多出一個環境變數,類似:SSH_AUTH_SOCK="/tmp/ssh-XXXXXXXXXX/agent.1234567"
。這樣,在 ssh 連線裡再使用 ssh 的時候(比如 git),就可以透過它,使用本機的 key 進行驗證。
注意新建的 ssh 連線可能需要在 ssh-agent 生效的情況下建立。而且已經存在的連線也可能需要斷掉重新連線才成。
遠端
遠端機器上其實啥都不需要做。
不過,VS Code 的 Remote SSH ,在遠端機器上會啟動一個 server ,這個 server 是長時間執行的,並不會每個連線新建一個。所以,新增加的環境變數在已有的 server 裡就不會生效,在 VS Code 裡還是用不到本機的 key。解決方法也簡單,就是把 server 都殺掉就好了。我是直接用 ps aux | grep vscode
找到所有程序,然後 kill 掉的。
用下面的命令可以直接得到所有 pid ,然後傳給 xargs kill
就可以了。直接 pipe 有風險,ps aux
會找到所有使用者的程序,grep 'vscode'
也可能找到無關的程序,所以得自己確認好,我也就不貼完整的命令了。
ps aux | grep 'vscode' | awk '{print $2}'