如何将已经转发的ssh密钥转发到tmux?


15

我正在从存储密钥的计算机通过SSH连接,然后转发到第二台计算机,然后尝试从tmux中使用密钥。输入tmux时,我似乎“松开”了转发。如何“再次转发”以便我可以在tmux中使用我的密钥?

$ ssh [server] -o ForwardAgent=yes
$ git pull       # Succeeds.
$ /bin/bash
$ git pull       # Still succeeds, despite new shell.
$ exit
$ tmux attach
$ git pull       # Permission denied (publickey)

我确认您是否启动了在所有会话之间共享的代理,它可以工作。bose.utmb.edu/Compu_Center/ssh/SSH_HOWTO.html >配置ssh-agent过程中的文档介绍了实现此结果的方法。
Dereckson 2014年

Answers:


12

如果要附加一个已经存在的tmux会话,则该Shell不会从您的登录Shell继承环境变量。特别是,它不会继承ssh代理环境变量。

试试这个修复

  1. 创建此脚本并将其放在$ HOME / .ssh / saveagent中

    #!/bin/sh
    SSHVARS="SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION DISPLAY"
    
    for var in ${SSHVARS} ; do
      echo "export $var=\"$(eval echo '$'$var)\""
    done 1>$HOME/.ssh/latestagent
  2. 将其添加到您的Shell启动脚本中。例如,如果您使用bash:

    echo '. ~/.ssh/saveagent' >> ~/.bash_login
  3. 连接tmux后,运行 . $HOME/.ssh/latestagent

另请参见通过SSH连接后如何立即运行脚本?附加到TMUX会话,并运行一个命令


1
如果您想与其他sh shell兼容,请发送至.profile。
Dereckson 2014年

2
好答案!我遇到了一些问题:a-一些环境变量包含空格,因此saveagent脚本中最后一个行应该是:echo "export $var=\"$(eval echo '$'$var)\""。b- latestagent应使用source而不是调用脚本sh,因此设置变量将影响调用shell。c- latestagent附加tmux后自动调用脚本可以通过以下方法完成:unix.stackexchange.com/questions/86925/…– 2014

感谢@Joe,我修改了答案以包含您的改进。
GnP 2014年

0

除非您希望提供一个脚本,该脚本包含每个外壳程序中所需的所有变量,然后再在同一tmux服务器会话派生的任何新外壳程序中派生出每个外壳程序,否则您可能希望使用命令告诉tmux将变量放入会话或全局环境中set-environment。例如这样(对于bash):

for var in DISPLAY SSH_AUTH_SOCK ...; do
    tmux setenv "$var" "${!var}"
done

请记住,-g如果您也希望在其他会话中添加该标志,请在-t <session>从外部运行它时使用它tmux


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.