一般情況下,我都是透過我的 notbook 的 macOSX(terminal) or windows(pietty) ssh 進去一台主機(dev)後,執行 screen 再開一些 windows 連到其他的主機(m1,m2,m3...)上做事,但是在併用 ssh-agent 及 screen detach 時,時常會發生找不到 agent 的情況,網路上有一大堆的解法,參考 http://www.reasonablyopinionated.com/2009/03/automatically-reconnecting-to-ssh-agent.html ,最後,我使用如下的方式解決。
先從 notebook 登入主機 dev
notebook> $ ssh dev
修改 dev 主機上的 .bash_profile,增加下面的 code
test $SSH_AUTH_SOCK && ln -sf "$SSH_AUTH_SOCK" "/tmp/ssh-agent-$USER-screen"修改 dev 主機上的 .screenrc,增加下面的 code
setenv SSH_AUTH_SOCK "/tmp/ssh-agent-$USER-screen"
好了,登出主機 dev
dev> $ exit notebook> $
接著再重新登入主機 dev, 方法一使用 -A 會啟 ssh-agent-forwarding, 也就是會有 ssh-agent 自動執行,如果你沒辦法這樣做,就用方法二,ssh dev,進去後,再執行 eval `ssh-agent`
方法一:
notebook> $ ssh -A dev dev> $ env | grep -i ssh SSH_CLIENT=172.17.x.x 64323 22 SSH_TTY=/dev/pts/27 SSH_AUTH_SOCK=/tmp/ssh-agent-username-screen SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass CVS_RSH=ssh SSH_CONNECTION=172.17.x.x 64323 192.168.x.x. 22
方法二:
notebook> $ ssh A dev> $ eval `ssh-agent` dev> $ env | grep -i ssh SSH_AUTH_SOCK=/tmp/ssh-agent-username-screen
最後,執行 screen, ssh-add 把 key 加到 ssh-agent 裡。
dev> $ screen dev (window1) > $ ssh-add
做完後工作,把 screen detach (Ctrl-A D). 下次進來再 attach screen (screen -r) 就會自動連結到有效的 ssh-agent 了。
===============================================
好心前同事提供的另一種方法(與上一個方法,擇一使用)
===============================================
提下列代碼加到 .bash_profile 裡
notebook> FOUND_SSH_AGENT_PID=`ps axU $USER | grep ssh-agent | grep -v grep | awk {'print $1'}` source ~/.agent if [ "${SSH_AGENT_PID}x" != "x" -a "$SSH_AGENT_PID" = "$FOUND_SSH_AGENT_PID" ] then SSHL=`ssh-add -l` if [ ! "$SSHL" != "The agent has no identities." ] then ssh-add fi else ssh-agent > ~/.agent source ~/.agent ssh-add fi
接著,修改 dev 主機上的 .screenrc,,把 setenv 註解或刪掉
## setenv SSH_AUTH_SOCK "/tmp/ssh-agent-$USER-screen"
Enjoy!
0 意見:
張貼留言