我见过很多在 tmux(和屏幕)会话中重新建立与 GUI 会话的 SSH 代理的联系的黑客攻击。我想知道是否有可能与 GUI 分离并生成一个纯粹用于给定 tmux 会话的 ssh 代理?代理本身是否必须“用完”其中一个 tmux 窗口以避免被杀死,或者是否有可能在后台生成一个只要会话处于活动状态就会持续存在的代理?
答案1
好的,我做了更多的挖掘,当终端连接时,我应该能够轻松地连接到 SSH_AGENT 周围的任何内容。tmux 已经提供了关键配置“update-environment”,但缺少的部分是现有的 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 的钥匙链实用程序提供了一种简洁的方法来重新连接并拥有用户/主机范围的代理而不仅仅是会话范围的代理。