每当我登入CentOS 5,MediaTemple(dv)伺服器时,我必须这样做:
ssh-agent $BASH ssh-add .ssh/my_id
一旦我设法login。 这用于我们的服务器参与到我们的git工作stream程中,当我们在开发过程中进行了相当多的迭代时,我越来越厌倦了一遍又一遍的做同样的事情。
把这个添加到服务器的.bash_profile中并不是很有效,而我对ssh的了解很less,这是因为执行ssh_agent $BASH几乎只是产生一个新的login窗口(因此,它会停止执行文件的下一行。 )。
如何让服务器在每次远程login时都具有关键性的工作?
最简单的方法是在SSH中启用代理转发,以便它使用本地系统上的代理而不是服务器上的代理。 如果没有,你可以按照man手册中的build议来运行eval $(ssh-agent -s) 。
这是从我几个月前为我的团队工作并在我的.bashrc中使用的脚本中复制的。 它是从一个想法集合编译,并调整到多个操作系统/环境,因为我们发现不兼容。 它检查一个正在运行的代理,如果需要的话启动一个(为其他shell保存数据)。 然后它检查该代理是否添加了密钥,如果没有添加它们10小时(devise为工作日)并使用确认。 如果需要,可以通过删除ssh-add的-c选项来删除确认。
SSH_ENV="$HOME/.bash_sshagent" 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 } # 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 -q ssh-agent$ || { start_agent; } else start_agent; fi /usr/bin/ssh-add -l > /dev/null || { echo No ssh identities detected. Running "ssh-add -c -t 36000"... /usr/bin/ssh-add -c -t 36000; }