ssh-agent && ssh-agent forward && SSH ProxyCommand
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 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-agent && ssh-agent forward && SSH ProxyCommand的更多相关文章
- SSH无密码登陆Agent admitted failure to sign using the key
		A :CentOS_Master B:Slave_1 C:Slave_2 普通用户hxsyl 1.现在A 上 ssh-keygen -t rsa 一路回车,不需要输入密码 执行该操作将在/home/h ... 
- SSH连接GitHub并配置ssh key
		SSH连接GitHub并配置ssh key 配置git的ssh提交,主要需要以下三步: 1.设置Git的user name和email 2.生成ssh 3.配置git 的ssh key 一.设置Git ... 
- 如何给 GitHub 添加  SSH key, 如何生成  SSH key 详细图文教程!
		如何给 GitHub 添加 SSH key, 如何生成 SSH key 详细图文教程! 一. 生成 SSH key https://ide.c9.io/xgqfrms/ 创建一个空项目:(或使用 ... 
- Gravitational Teleport 是一个先进的 SSH 服务器,基于 Golang SSH 构建,完全兼容 OpenSSH
		Gravitational Teleport 是一个先进的 SSH 服务器,可通过 SSH 或者 HTTPS 远程访问 Linux 服务器.其目的是为了替代 sshd.Teleport 可以轻松让团队 ... 
- git错误--ssh: Could not resolve hostname ssh.github.com: Name or service not known--解决方式
		错误如下: git push origin ssh: Could not resolve hostname ssh.github.com: Name or service not known fata ... 
- 不能ssh连接ubuntu linux 服务器 secureCRT不能ssh连接服务器 不能远程ssh连接虚拟机的ubuntu linux
		我是用的是secureCRT,远程连接我的虚拟机里面的ubuntu 直接报错,连接不上 1,先分别在windows上ipconfig和ubuntu上ifconfig下 互ping一下,是可以ping通 ... 
- git ssh免登陆,以及ssh config
		git去连接github或gitlab上的远程仓库,可以使用ssh方式,也可以使用git的账号密码登录 这里介绍使用ssh方式实现免登陆(第一步和第二步即可实现) 第一步:生成ssh秘钥 ssh- ... 
- ssh之为什么要放弃ssh?
		本文经转载, 源出处不详.https://www.cnblogs.com/hackxiyu/p/6849085.html 最近听一些朋友说,招聘面试的很多人简历都差不多,大部分人的简历上面都写了熟悉s ... 
- Debian9安装SSH并允许root用户SSH登录
		安装SSH # apt install openssh-server openssh-client 启动SSH服务 # /etc/init.d/ssh start 添加SSH开机启动 # update ... 
随机推荐
- JScrollPane (滚动面板)使用心得
			注意:使用滚动面板时,必须指定内部组件是哪个组件 JScrollPane的两种使用方式:. 方式一: //直接在创建滚动面板对象时,就指定所要显示的组件 //本例中所要显示的是jPanel JPane ... 
- mysql  常用函数。。
			FIND_IN_SET(str,strlist) ,strlist 是 一个 由 逗号 分割的字符串,要注意 strlist 不能有逗号.. 它 等于 where str in (1,2,3***) ... 
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_高级管理控制(配置)
			一个应用程序的XML配置文件示例: <?xml version="1.0"?> <configuration> <runtime> <as ... 
- JAVA第二个程序
			关于计算基础问题华氏度与摄氏度互相转化问题 题目内容: 写一个将华氏温度转换成摄氏温度的程序,转换的公式是: °F = (9/5)*°C + 32 其中C表示摄氏温度,F表示华氏温度. 程序的输入是一 ... 
- 江西财经大学第一届程序设计竞赛 F
			链接:https://www.nowcoder.com/acm/contest/115/F来源:牛客网 题目描述 对于方程 2018 * x ^ 4 + 21 * x + 5 * x ^ 3 + 5 ... 
- django 母版与继承
			在子页面的页面最上方使用下面的语法来继承母版. {% extends 'layouts.html' %} 块: 通过在母版中使用{% block xxx %}来定义块.在子页面中通过定义母版中的blo ... 
- 简单的Web日志分析脚本
			前言 长话短说,事情的起因是这样的,由于工作原因需要分析网站日志,服务器是windows,iis日志,在网上找了找,github找了找,居然没找到,看来只有自己动手丰衣足食. 那么分析方法我大致可分为 ... 
- 转载  Some indexes or index [sub]partitions of table VAS.TAB_PUB_CALLLOG have been marked unusable
			http://www.xifenfei.com/2011/12/some-indexes-or-index-subpartitions-of-table-vas-tab_pub_calllog-hav ... 
- 工作ui(2)
			做完整个小Demo整理的一些方法和踩过的miniUI的坑,分享出来希望大家批评指正,共同进步. 1.动态创建列:尽量不要直接在html文件里创建列,动态设置在js文件里方面添加.修改等. 首先把列定义 ... 
- 关于老教授之家项目的思考 && 中国互联网+大赛培训
			最近在做中国互联网+竞赛相关的项目,有一点思考在这里记录下来,算是一份经历,日后可以再回顾,这也是我真正参加的一个大型比赛,作为技术人员可能更多的是从事技术,但是在其他方面能贡献自己的一份力量也是不错 ... 
