我見過很多從 tmux(和螢幕)會話中重新建立與 GUI 會話的 SSH 代理的聯繫的 hack。我想知道是否可以與 GUI 分離並產生純粹用於給定 tmux 會話的 ssh 代理?代理本身是否必須「用完」其中一個 tmux 視窗以避免被殺死,或者是否有可能在後台產生一個只要會話處於活動狀態就持續存在的視窗?
答案1
好的,我已經做了一些更多的挖掘,當連接終端時,我應該能夠輕鬆地連接到 SSH_AGENT 周圍的任何內容。 tmux 已經提供了關鍵配置“更新環境”,但是缺少的部分是現有的 shell 沒有神奇地更新。然而 tmux 確實追蹤更新的環境變量,因此更新腳本比螢幕要簡單得多:
# Sync the environment of an existing shell
#
# tmux already updates the environment according to
# the update-environment settings in the config. However
# for existing shells you need to sync from from tmux's view
# of the world.
function tmux_sync_env
{
external_env=`tmux showenv | grep -v "^-"`
export ${external_env}
}
由此犯罪
答案2
我必須修改@stsquad的回答。它對我來說失敗了,因為export
命令無法設定SSH_CONNECTION
變數。
我必須將 的值SSH_CONNECTION
用引號引起來。
function tmux_sync_env
{
ssh_auth_sock=`tmux showenv | grep "^SSH_AUTH_SOCK"`
ssh_connection=`tmux showenv | grep "^SSH_CONNECTION"`
export ${ssh_auth_sock}
export "${ssh_connection}"
}
答案3
我最近發現的另一個選擇是丹尼爾羅賓斯(Daniel Robbins)鑰匙鏈實用程式提供了一種巧妙的重新連接方式,並擁有用戶/主機範圍的代理,而不僅僅是會話範圍的代理。