您的位置:首页 > 其它

SSH的认证终结(无需密码的git操作或者ssh链接无需密码)

2014-08-13 14:01 253 查看





1. PublicKey认证基本原理

Public Key(非对称,asymmetric)认证使用一对相关联的Key Pair(一个公钥Public Key,一个私钥Private Key)来代替传统的密码(或我们常说的口令,Password)。顾名思义,PublicKey是用来公开的,可以将其放到SSH服务器自己的帐号中,而PrivateKey只能由自己保管,用来证明自己身份。

使用PublicKey加密过的数据只有用与之相对应的PrivateKey才能解密。这样在认证的过程中,PublicKey拥有者便可以通过PublicKey加密一些东西发送给对应的PrivateKey拥有者,如果在通信的双方都拥有对方的PublicKey(自己的PrivateKey只由自己保管),那么就可以通过这对Key Pair来安全地交换信息,从而实现相互认证。在使用中,我们把自己的PublicKey放在通过安全渠道放到服务器上,PrivateKey自己保管(用一个口令把PrivateKey加密后存放),而服务器的PublicKey一般会在第一次登录服务器的时候存放到本地客户端(严格地说来服务器的PublicKey也应该通过安全渠道放到本地客户端,以防止别人用他自己的PublicKey来欺骗登录)。


2. Public Key认证相对于其它SSH认证的优点

在众多SSH登录认证中,传统的单口令(Password)认证用得比较多,所以在这里我们主要对比一下SSH认证中的口令(Password)认证和PublicKey认证的区别。

a. 基于主机IP(rhost)的认证:对于某个主机(IP)信任并让之登录,这种认证容易受到IP欺骗攻击。 b. Kerberos认证:一个大型的基于域的认证,这种认证安全性高,但是太大、太复杂不方便部署。

c. PAM认证:类似于传统的密码认证,是绝大多数Unix/Linux系统自带的一个认证和记帐的模块,它的功能比较复杂,配置起来比较麻烦。而且,容易由于配置失误而引起安全问题。 汗维

d. 传统的Unix/Linux口令(或密码Password)认证:在客户端直接输入帐号密码,然后让SSH加密传输到服务器端验证。这种认证方式有着如下明显的缺点

1)为了确保密码安全,密码必须很长很复杂,但是这样的密码很难记忆

2)对于自己所拥有的每个帐号,为了安全,不同的帐号都要设置不同的密码,管理起来很不方便

3) 对于默认帐号,默认密码,例如装机时用的帐号,如果一时疏忽没有改密码,被其它不怀好意的人扫描到帐号和密码,可能会造成安全漏洞

4)如果远程主机已经被攻击,即使使用SSH安全通道进行保护,在网络上发送的密码在到达远程主机时也可能被截获;

5)对于每个帐号的修改都要人工登录(为了安全,不能把Password放到脚本里),随着服务器数量增多,这项工作会变得十分烦琐。


3. Public Key配置(ssh-keygen命令生成公钥和私钥即可)

使用一种被称为"公私钥"认证的方式来进行ssh登录. "公私钥"认证方式简单的解释:首先在客户端上创建一对公私钥 (公钥文件:~/.ssh/id_rsa.pub; 私钥文件:~/.ssh/id_rsa)

然后把公钥放到服务器上(~/.ssh/authorized_keys), 自己保留好私钥.在使用ssh登录时,ssh程序会发送私钥去和服务器上的公钥做匹配.如果匹配成功就可以登录了

ssh-keygen的使用方法
一、概述

1、就是为了让两个linux机器之间使用ssh不需要用户名和密码。采用了数字签名RSA或者DSA来完成这个操作

2、模型分析

假设 A (192.168.20.59)为客户机器,B(192.168.20.60)为目标机;

要达到的目的:

A机器ssh登录B机器无需输入密码;

加密方式选 rsa|dsa均可以,默认dsa

二、具体操作流程

(1)单向登陆的操作过程(能满足上边的目的):

1、登录A机器

2、#ssh-keygen -t [rsa|dsa],将会生成密钥文件和私钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub

3、将 .pub 文件复制到B机器的 .ssh 目录, 并 #cat id_dsa.pub >> ~/.ssh/authorized_keys

4、大功告成,从A机器登录B机器的目标账户,不再需要密码了;(直接运行 #ssh 192.168.20.60
(这里需要注意的是,ssh的时候注意是在哪个用户下面#ssh tang_h@192.168.20.60 //表明在tang_h的用户下面,不加用户名默认是root的用户目录下面)

(2)双向登陆的操作过程:

1、ssh-keygen做密码验证可以使在向对方机器上ssh ,scp不用使用密码.具体方法如下:

2、两个节点都执行操作:#ssh-keygen -t rsa

然后全部回车,采用默认值.

3、这样生成了一对密钥,存放在用户目录的~/.ssh下。

将公钥考到对方机器的用户目录下

,并将其复制到~/.ssh/authorized_keys中(操作命令:#cat id_dsa.pub >> ~/.ssh/authorized_keys


4. Git的使用(只需要在git的server端上传共有key即可);

1.查看是否已经有了ssh密钥:cd ~/.ssh

dst60065:xmon-mobile jack$ cd /Users/jack/.ssh/

dst60065:.ssh jack$ ls

id_rsa id_rsa.pub known_hosts

2.在github上添加ssh密钥,这要添加的是“id_rsa.pub”里面的公钥。



3:测试:ssh git@github.com

dst60065:.ssh jack$ cd /Users/jack/work_space/git/xmon-mobile/

dst60065:xmon-mobile jack$ ls

dst60065:xmon-mobile jack$ git clone git@git.dev.sh.ctripcorp.com:yf.wu/xmon-mobile.git

Cloning into 'xmon-mobile'...

remote: Counting objects: 271, done.

remote: Compressing objects: 100% (242/242), done.

remote: Total 271 (delta 22), reused 248 (delta 11)

Receiving objects: 100% (271/271), 2.53 MiB | 2.73 MiB/s, done.

Resolving deltas: 100% (22/22), done.

Checking connectivity... done.

dst60065:xmon-mobile jack$ git config --global user.name "jack"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: