liux ssh基本原理及简单使用

   ssh远程登录使用了好久,突然想知道ssh与目录服务器的登录的交互流程,在网上找了好多关于ssh文章,有的写的是太笼统,有的是太仔细,涉及到了底层细节交互流程,对我一个不是搞运维的人难以理解,但总体来说找到了把ssh概念交互流程搞清了,以下本人感觉说的应该是大致正确的(网上说交互流程的各种方式都有):

      第一种级别是基于口令的安全验证

只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密, 但是不能保证你正在连接的服务器就是你想连接的服务器。这个过程如下:

(1)客户端向远程主机请求口令的安全验证,远程主机收到用户的登录请求,把自己的公钥发给用户。

(2)用户使用这个公钥,将登录密码加密后,发送回去。

(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。这种方式可能会有别的服务器在冒充真正的服务器,将公钥发送给客户端,客户端就会将密码加密后发送给冒充的服务器,冒充的服务器就可以拿自己的私钥获取到密码,也就是受到“中间人”这种方式的攻击。

值得一说的是当第一次链接远程主机时,会提示您当前主机的“公钥指纹”,询问您是否继续,如果选择继续后就可以输入密码进行登录了,当远程的主机接受以后,该台服务器的公钥就会保存到~/.ssh/known_hosts文件中。

第二种级别是基于密匙的安全验证

 过程:需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上,假设现在有a和b两台服务器,a就会向b服务器发出基于密匙的安全验证请求,请求用a密匙进行安全验证(并发送公钥)。b服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”并把它发送给a服务器。a服务器收到“质询”之后就可以用你的私人密匙解密再把它发送给b服务器,b服务端用你的公钥解析成功就可以了。用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)

试验:我在看第二种基于密钥的安全验证的时候,感觉很怪,感觉到了不安全,原因如下:现在有137、135和117三台服务器,117已经采用ssh-key -t dsa生成,并把公钥放到135机器,现在117登录135已经不需要密码。137访问135还是需要密码的,现在把137/root/.ssh/下面的文件全部删除,将117的私钥copy到137的/root/.ssh/目录下。现在137访问135也不需要密码。

是不是感觉有点不安全,按照上边介绍的基于密匙的安全验证过程,我的试验成功了。那意思是说,如果把117的私钥copy到另一个服务器的目录下,登录135都不需要密码啦。

大致的交互流程可以理解为上边两种实际的底层交互很复杂,可以参考:http://www.dalei.org/ssh-theory-analyze-and-use-1/

-------------------------------------------------------------------------介绍ssh相关的命令------------------------------------------

有了免密码登录之后,就可以开始以下操作了。

1、SSH主要用于远程登录。假定你要以用户名user,登录远程主机host,如果本地用户名与远程用户名一致,登录时可以省略用户名

$ ssh user@host

2、远程端口转发
1)本地端口转发
使用linux的ssh命令,将某台服务器的端口转发至本地服务器,
ssh 使用参数-L
ssh -L 本地端口:本地服务器:服务器端口 user@服务器地址
举例:
将服务器123.123.123.123的2222端口转发至本地服务器22端口
ssh -L 22:localhost:2222 user@123.123.123.123
此时,连接本地服务器的22端口,等同于连接123.123.123.123的2222端口
(注:此种方法是两台服务器之间建立一个ssh隧道,所以,只能从localhost上登录本地端口22,不能通过其他远程登录本地服务器22端口来访问。)在主流 SSH 实现中,本地端口转发绑定的是 lookback 接口,这意味着只有 localhost 或者 127.0.0.1 才能使用本机的端口转发 , 其他机器发起的连接只会得到“ connection refused. ”。好在 SSH 同时提供了 GatewayPorts 关键字,我们可以通过指定它与其他机器共享这个本地端口转发。
ssh -g -L <local port>:<remote host>:<remote port> <SSH hostname>
2)远程端口转发
ssh 使用参数-R
ssh -R 本地端口:本地地址:服务器端口 user@服务器地址
ssh -R 22:127.0.0.1:22 root@123.123.123.123 -p 2222
此时,登录123.123.123.123后,则可以通过访问其22端口实现访问本地的22端口
参考:
http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html
http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/
 
转载------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值