ssh-agent && ssh-agent forward && SSH ProxyCommand
2015-01-05 15:50
417 查看
http://blog.csdn.net/sdcxyz/article/details/41487897
https://developer.github.com/guides/using-ssh-agent-forwarding/
http://zgu.me/blog/2014/08/21/use-ssh-agent-forwarding-in-your-private-network/
ssh密码认证
ssh公钥认证
使用ssh agent的公钥认证
配置
使用ssh agent forwarding的公钥认证
https://developer.github.com/guides/using-ssh-agent-forwarding/
http://zgu.me/blog/2014/08/21/use-ssh-agent-forwarding-in-your-private-network/
ssh密码认证
ssh client向目标机器发起tcp连接(一般22端口)并发送username (username是SSH协议的一部分) 目标机器ssh daemon回应需要密码 ssh client提示用户输入密码,然后将密码发送到服务器端 ssh daemon如果密码匹配成功, 则认证通过 # 不适合于管理多台机器.若每台机器使用相同的密码,如果密码泄露,所有机器都被攻破。若使用不同密码,则密码太多很难记住,因此也不可能使用很强的密码
ssh公钥认证
ssh client向目标机器发起tcp连接(一般22端口) ssh client提示用户输入passphrase以解密私钥 ssh client发送私钥签名的包含username和公钥等信息的message. 目标机器ssh daemon通过检查消息中指定用户的$HOME/.ssh/authorized_keys,确定公钥是否可用作认证并验证签名的合法性, 如果两者都ok, 则通过认证 # 私钥(如.ssh/id_rsa)是广义的,既包含了私钥,也包含了公钥,也有可能还包含了其他信息(比如证书)。比如通过ssh-keygen -y ~/.ssh/id_rsa就可以看到id_rsa里面的公钥。用作认证的私钥最好通过passphrase进行加密,否则会有很大安全隐患,只要私钥泄露,别人就能访问你能访问的所有远程机器。每次登陆都得输入passphrase
使用ssh agent的公钥认证
ssh client向目标机器发起tcp连接(一般22端口) ssh client向本地的agent请求, 得到私钥签名的包含username和公钥等信息的message ssh client向目标机器发送此message和签名 目标机器ssh daemon通过检查消息中指定用户的$HOME/.ssh/authorized_keys,确定公钥是否可用作认证并验证签名的合法性, 如果两者都ok, 则通过认证 # 私钥只存在于agent的内部(内存中), ssh client并没有获取到私钥。使用ssh-agent后,只需在将key纳入agent管理时输入passphrase,之后的ssh相关操作就不必输入passphrase了。但如果从本机A登陆机器B后,又想从B登陆C (或从B传输文件到C),仍然需要输入passphrase
配置
# eval `ssh-agent` Agent pid 11485 # ssh-add Enter passphrase for /root/.ssh/id_rsa: Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa) # ssh -p 29922 root@10.0.153.45 Last login: Wed Jun 15 17:49:40 2016 from 10.10.32.80 自启动,自停止 .bash_profile eval `ssh-agent` > /dev/null .bash_logout kill $SSH_AGENT_PID
使用ssh agent forwarding的公钥认证
假设用户已经从homepc连接到了第一台机器server。homepc的agent中已保存了用户的私钥 server: 用户从server向server2发起ssh连接请求 server: ssh client向本地(server)的agent请求, 得到私钥签名的包含username和公钥等信息的message。 注意server上其实ssh-agent压根就没有启动,ssh client只是检查$SSH_AUTH_SOCK这个环境变量是否存在,如果存在,则和这个变量指定的domain socket进行通信。而这个domain socket其实是由server上的sshd创建的。所以ssh client其实是和sshd在通信。 而server的sshd并没有私钥信息,所以sshd做的事情其实是转发该请求到homepc的ssh client,再由该client将请求转发给本地(homepc)的agent。该agent将需要的消息和签名准备完毕后,再将此数据按原路返回到server的ssh client. 路径如下所示 agent_homepc --($SSH_AUTH_SOCK)-- ssh_homepc --(tcp)-- \ sshd_server --($SSH_AUTH_SOCK)-- ssh_server --(tcp)-- \ sshd_server2 这下明白为什么叫agent forwarding(转发)了吧,就是所有中间节点的sshd和ssh都充当了数据转发的角色,一直将私钥操作的request转发到了本机的agent,然后再将agent的response原路返回。 server: ssh client向目标机器server2发送此message和签名 server2: ssh daemon通过检查消息中指定用户的$HOME/.ssh/authorized_keys,确定公钥是否可用作认证并验证签名的合法性, 如果两者都ok, 则通过认证
相关文章推荐
- ssh ProxyCommand
- Google Now Command List[Forward]
- ssh ProxyCommand
- 解决 Agent admitted failure to sign using the key 问题 with ssh & repo
- ssh agent forward
- 配置SSH 解决Agent admitted failu…
- CentOS7安装Murano-agent时的error:command 'gcc' failed with exit status 1
- SSH proxycommand:利用跳板机让不在同一局域网的机器ssh直连
- SSH ProxyCommand及其思想
- SSH ProxyCommand 实践
- ssh解决<jsp:forward />请求action报“请求的数据源不可使用的bug”
- SSH ProxyCommand
- error C2065: 'CoSetProxyBlanket' : undeclared identifier 问题解决方法
- OpenSSH 密钥管理:ssh-agent和keychain
- John Paul Mueller, «Windows Administration at the Command Line for Windows 2003, Windows XP, and Windows 2000: In the Field Resu
- end systems and proxy servers can provide forward services
- SSH(struts+spring+hibernate)迅速开发--附录2 Struts 常用标签&国际化(2)
- Dissecting The Nutch Crawler - Command "crawl": net.nutch.tools.CrawlTool
- window.document.execCommand("SaveAs",false,id+".xls"); 在IE7下的问题