linux openssh 代理转发总结

来源:互联网 发布:Bigbang yg知乎 编辑:程序博客网 时间:2024/05/22 04:48


我们的服务器都是通过key认证的,使用CRT登录服务器,虽然登录各个服务器用CRT(它有OPENSSH代理转发的功能)已经很方便了,不需要输入密码。但是,当我们在控制服务器上通过ssh客户端执行脚本的时候,打个比方,在center上有个脚本,脚本中需要ssh到host1执行脚本1,而脚本1中又需要ssh到host2获取数据,很显然,当在center执行这个脚本的时候,脚本中ssh到host1执行脚本1是成功的(因为CRT启用了转发,所以从center ssh到host1认证是通过的),但是host1上的脚本1 ssh到host2肯定是失败的。因为在center上没有启用代理转发,所以从host1到hosts2的认证是失败的。那怎么办呢?


那就是使用SSH代理转发就OK了,在center控制服务器上,启动代理程序,添加私钥,搞定!

[root@centos6-1 ~]# eval `ssh-agent`Agent pid 26771[root@centos6-1 ~]# ssh-add Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)[root@centos6-1 ~]# 

eval `ssh-agent`

#这么要加个eval?因为执行ssh-agent会生成两个变量,一个sock文件的变量,一个pid的变量,而这两个东西在使用ssh-add添加私钥的时候需要用到,所以必须把它添加到环境变量中去,并且它自杀的时候也需要用到(ssh-agent -k),如下所示:

[root@centos6-1 ~]# ssh-agentSSH_AUTH_SOCK=/tmp/ssh-XesKe26726/agent.26726; export SSH_AUTH_SOCK;SSH_AGENT_PID=26727; export SSH_AGENT_PID;echo Agent pid 26727;

然后再添加私钥
ssh-add
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
默认就是使用的~/.ssh/id_rsa 等私钥文件!

基本上这里就搞定了,在终端上肯定是没问题的了,但是一旦退出终端,这个就失效了,而且,每天登录的时候都必须执行上述两个步骤,难免有些繁琐,而且假设我这个脚本是在计划任务中执行的呢?也不管用了。

所以我必须把它加到环境变量中去,而且这个脚本必须能够用到这个环境变量。于是,我写了个脚本,在登录的时候自动执行这两步,vim /etc/profile.d/ssh-agent.sh:

#!/bin/bashif [ ! -S "/etc/ssh/ssh-agent.sock" ]then        eval `ssh-agent -a /etc/ssh/ssh-agent.sock` >/dev/null && ssh-add &>/dev/null        echo -e "SSH_AGENT_PID=$SSH_AGENT_PID\nSSH_AUTH_SOCK=$SSH_AUTH_SOCK" > /etc/ssh/ssh-agent.envelse        source /etc/ssh/ssh-agent.env        export SSH_AGENT_PID SSH_AUTH_SOCK        ssh-add &>/dev/nullfi~      
在启动ssh-agent的时候,我指定了sock路径,为什么?因为每次启动程序的时候它都会产生一个新的进程,指定了sock文件了就避免了这种情况了。

然后,凡是在计划任务中运行的脚本,首先source /etc/profile下,就解决问题了。当然,ssh的时候必须开启代理转发啊,比如使用ssh -A 这样的方式,或者,直接在center服务器上的ssh配置文件中加入:

vim ~/.ssh/config

Host *        ForwardAgent yes

OK,就搞定了!






原创粉丝点击