我在Linux上使用带密码保护密钥的ssh-agent。 每当我login到某台机器,我都这样做:
eval `ssh-agent` && ssh-add
这工作得不错,但每次我login并做到这一点,我创build另一个SSH代理。 有一段时间,我会做一个killall ssh-agent
收获他们。 有没有一种简单的方法来跨不同的会话重复使用相同的ssh-agent进程?
看看钥匙扣。 这是写给你自己类似情况的人。 钥匙扣
你对这台机器有多少控制? 一个答案就是运行ssh-agent作为一个守护进程。 其他选项在这个网页上解释,基本上是测试代理是否在附近,如果没有,就运行它。
重现这里的一个想法:
SSH_ENV="$HOME/.ssh/environment" function start_agent { echo "Initialising new SSH agent..." /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}" echo succeeded chmod 600 "${SSH_ENV}" . "${SSH_ENV}" > /dev/null /usr/bin/ssh-add; } # Source SSH settings, if applicable if [ -f "${SSH_ENV}" ]; then . "${SSH_ENV}" > /dev/null #ps ${SSH_AGENT_PID} doesn't work under cywgin ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || { start_agent; } else start_agent; fi
你可以做:
ssh-agent $SHELL
这将导致shell退出时退出ssh-agent。 他们仍然不会在会话中共享,但至少当你这样做的时候他们将会消失。
根据您使用的外壳,您可以为登录shell设置不同的配置文件,而只需设置常规的新shell。 一般而言,您希望为登录shell启动ssh-agent,但不是为每个子shell启动。 在bash中,这些文件例如是.bashrc
和.bash_login
。
现在大多数桌面linuxes都为你运行ssh-agent。 您只需使用ssh-add添加密钥,然后通过运行将密钥转发到远程ssh会话
ssh -A