1:查看系统是否已经安装了ssh套件,或则系统是否已经启动了ssh服务

dpkg -l openssh-server  //查看是否安装服务器端
dpkg -l openssh-client  //查看是否安装客户端

netstat -tl             //查看系统是否已经启动了ssh服务
  -t:表示tcp协议
  -l:表示listen状态

2:生成密钥。
在当前用户的主目录下生成密钥,并且放在一个.ssh的文件夹中。

1:生成密钥
    ssh-keygen -t rsa -f ~/.ssh/id_rsa
    ********提示输入密码****************
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    ********进入~/.ssh目录***************
    cd ~/.ssh/

2:将密钥复制进入一个名字为"authorized_keys"中。
    这个名字是默认的,不能改变,
    因为系统就是根据这个文件来判断那些机器的公钥已经保存在这里了,
    可以进行免钥登录。
    cat id_rsa.pub >> authorized_keys

3:分发密钥 (这是最主要的!!)
想方设法把这个authorized_keys文件发送给你想要登录的机器,并且追加到目标机器对应位置的authorized_keys文件中,这样目标机器就有了你的公钥,从而允许登录。
这里用到了远程拷贝的方式

scp authorized_keys liufukin@hadoop:/home/liufukin/

最后去目的主机把这个文件追加到对应的.ssh目录下的authorized_keys 中。这样,目的主机就有了此客户机的“公钥”。

(还有共享文件的NFS共享文件的形式,使得所有机器上的authorized_keys 都一样,都拥有集群中所有主机的公钥!)

4:登录到目的主机有两种方式:
1:)基于用户和口令的登录

ssh liufukin@hadoop2
liufukin@hadoop2's password: 
//这边输入的是目的主机开机登录时的密码,这个是每一次都要输入的。不能够做免密钥登录。

2:)基于公私钥的验证登录(可以用于免密钥登录)

ssh hadoop2
Enter passphrase for key '/root/.ssh/id_rsa':  
//这里输入的是客户机的公钥。而不是目的主机的公钥。

注意,这里的密码一定是客户机这边的公钥。

5:退出登录:exit

6:总结:

一:那么具体登录到目的主机的那个用户呢?

假设客户机中当前用户为root
ssh hadoop2     //将会默认登录到目的主机hadoop2对应的root中
ssh liufukin@hadoop2 //将会登录到目的主机hadoop2对应的liufukin中(不管liufukin存不存在)


接下来就会判断目的主机中的“对应账户主目录”下有没有
.ssh/authorized_keys文件,同时这个文件中有没有“客户机”的公钥。 
来确定使用哪种登录方式。
---也就是接下来的第二步-----

二:ssh登录分为两种:

1:)基于用户和口令的登录(每次都需要输入密码)

## 目的主机 ##中对应的用户下没有
.ssh/authorized_keys或者这个文件中没有## 客户机 ##的公钥时,
就会提示输入这个账户的登录密码。
liufukin@hadoop2's password:

2:)基于公私钥认证登录(可以实现免密钥登录)

## 目的主机 ##中对应的用户下存在
.ssh/authorized_keys并且这个文件中有## 客户机 ##的公钥时,
就会提示输入公钥
Enter passphrase for key '/root/.ssh/id_rsa':  

注意:如果三次输入公钥都不正确,则会自动转回口令密码
Enter passphrase for key '/home/liufukin/.ssh/id_rsa': 
Enter passphrase for key '/home/liufukin/.ssh/id_rsa': 
Enter passphrase for key '/home/liufukin/.ssh/id_rsa': 
liufukin@hadoop2's password: 

三:ssh简介原理

  简单说,SSH是一种网络协议,用于计算机之间的加密登录。
  最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。
  1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,
  成为互联网安全的一个基本解决方案,迅速在全世界获得推
  广,目前已经成为Linux系统的标准配置。
  需要指出的是,SSH只是一种协议,存在多种实现,既
  有商业实现,也有开源实现。本文针对的实现是OpenSSH,
  它是自由软件,应用非常广泛。

实现的原理:

(1)客户机向远程主机发送登录请求,并且把自己的公钥发送给远程主机。
(2)远程主机收到用户的登录请求,首先判断对应的用户主目录下是否存在
    .ssh/authorized_keys并且这个文件中有没有有## 客户机 ##的公钥时,
    如果条件不成立,就会使用## 账户口令登录登录的方式 ##。
        同时向客户机返回1.## 自己的公钥 ##

    如果条件成立,则会使用## 公私钥登录的方式 ##。
        同时向客户机返回1.自己的公钥;  2.客户机公钥加密过的## 一些验证信息 ##
账户口令登录登录的方式:(每次都需要输入密码,不能免密钥登录)
      (3)用户使用这个公钥,将登录密码加密后,发送回来。
      (4)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

基于公私钥登录的方式:(可以实现 免密钥登录)
      能用到这种方式的前提是,用户已经将自己的公钥储存在远程主机上,
      这个是重点,也就是所谓的“公密钥分发”。

      (3)用户用自己的私钥解密“随机信息”后,接着用“私钥”加密签名该“随机信息”,
      最后再用远程主机的公钥加密发送给远程主机。
      (4)远程主机先用自己的私钥解密,然后在用事先储存的客户机公钥进行解密认证,
      得出“随机信息”,如果“随机信息”正确,就证明用户
      是可信的,直接允许登录shell,不再要求密码。
Logo

更多推荐