透過 ForwardAgent ,在遠端機器上,使用本機 ssh key 進行驗證

fefe發表於2024-11-01

透過 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}'

相關文章