配置ssh免密登录过程(linux配置ssh免密登录)

1.从cp/scp命令出发

scp(secure copy)是linux系统下基于ssh登录进行安全的远程文件拷贝的命令。

1. 传递文件到远程scp local_file remote_username@remote_ip:remote_file2. 传递文件夹到远程scp -r local_folder remote_username@remote_ip:remote_folder 3. 复制远程文件到本地,只是调换下文件参数位置即可scp remote_username@remote_ip:remote_file local_file

备注:

远程拷贝的命令还有rsync,scp消耗资源少,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。rsync比scp会快一点,但当小文件多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。与scp相似的命令是cp,但是cp只能本机拷贝而不能跨服务器,因此需要与ssh合作构成scp命令。

直接使用scp来跨机器拷贝文件,会提示输入密码,scp原理是先使用ssh连接服务端机器后,再使用网络来执行远程拷贝(cp)

2.SSH原理

Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。虽然任何网络服务都可以通过SSH实现安全传输,SSH最常见的用途是远程登录系统,通常利用SSH来传输命令行界面和远程执行命令。

2.1安全性

SSH是Telnet/rlogin等非安全shell的替代品,Telnet/rlogin等非安全shell这些协议采用明文传输,会引入许多的安全性问题:

配置ssh免密登录过程(linux配置ssh免密登录)

telnet使用23号端口,所有的信息,包括用户名和密码都是明文传输,并不安全。而ssh使用22号端口,所有的信息都会被加密传输,保证了安全性。

$ssh user@hostnameuser@hostname’s password:2.2 对称加密和非对称加密2.2 .1简介对称加密和非对称加密

对称加密和非对称加密是针对密钥和解密的算法而言,对称加密是加密和解密用同一套算法,同一个密钥操作,即单密钥加密 ,对称加密算法中常用的算法:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES,优点是速度快

非对称加密是在此基础上新增了一组私有密钥,加密信息的公钥算法是相同的,但是解密私钥算法各有各的不同,常见的有:RSA、Elgamal、背包算法、Rabin、D-H、ECC,优点:安全性高

ssh利用的是非对称加密。

ssh-keygen -t rsa 生成ssh的id_rsa、id_rsa.pub,将id_rsa.pub拷贝到另外一台机器上,可以实现无口令访问,也可以方便git端代码的管理。

2.2.2对称加密

对称加密使用同一个密钥来进行加密和解密,这样在传输时是安全可靠的。

但是如何安全的保存密钥呢,在集群中,客户端的数量巨大,一旦任意一个客户端的密钥被窃取,那么整个系统的安全性也不复存在。

2.2.3 非对称加密

由于对称加密的这个弊端,产生了非对称加密,非对称加密中有两个密钥:公钥和私钥。

公钥由私钥产生,但却无法推算出私钥;公钥加密后的密文,只能通过对应的私钥来解密。

初始状态:topgun终端要登录Server服务器,发起连接请求ssh work@server.com

服务端运行有ssh服务,并持续监听22号端口,因此可以生成一对公钥和私钥;此时将公钥返回给客户端

客户端使用公钥,对登录密码进行加密,(如服务器work用户密码为xxx),生成公钥加密字符串

客户端将公钥加密字符串发送给服务端

服务端使用私钥,解密公钥加密字符串,得到原始密码

校验密码是否合法(此为本机work密码)

返回登录结果给客户端:成功登录或密码错误

在非对称加密中,由于只有公钥会被传输,而私钥是服务端本地保存,因此即便公钥被监听,也无法拿到原始密码,从而登录服务器。

2.2.3 SSH登录

SSH的用户认证方式有两种,

第一种是账户密码登录,即你需要连接的远程服务器某一个用户与密码,都要输入密码,

第二种是公钥验证授权登录,这一种认证较为复杂,但是配置好后其后续操作将十分便捷。

为避免使用ssh登录远程服务器每次登录都要输入密码,ssh提供一种免密登录的方式:公钥登录。

在客户端使用ssh-keygen生成一对密钥:公钥 私钥

将客户端公钥追加到服务端的authorized_key文件中,完成公钥认证操作

认证完成后,客户端向服务端发起登录请求,并传递公钥到服务端

服务端检索authorized_key文件,确认该公钥是否存在

如果存在该公钥,则生成随机数R,并用公钥来进行加密,生成公钥加密字符串pubKey(R)

将公钥加密字符串传递给客户端

客户端使用私钥解密公钥加密字符串,得到R

服务端和客户端通信时会产生一个会话ID(sessionKey),用MD5对R和SessionKey进行加密,生成摘要(即MD5加密字符串)

客户端将生成的MD5加密字符串传给服务端

服务端同样生成MD5(R,SessionKey)加密字符串

如果客户端传来的加密字符串等于服务端自身生成的加密字符串,则认证成功

此时不用输入密码,即完成建连,可以开始远程执行shell命令了

3.实现免密登录a. 生成公私钥

ssh-genkey是生成密钥的工具,执行完成后生成公钥和密钥,这两个文件会默认保存在~/.ssh/路径下。常用的参数为:

-t:指定生成密钥类型(rsa、dsa)。默认为rsa

-f:指定存放私钥的文件,公钥文件名为私钥文件名加.pub后缀。默认为id_rsa

-P:指定passphrase(私钥的密码),用于确保私钥的安全。默认为空

-C:备注。默认为user@hostname

我们直接执行来生成密钥,所有的参数都可以为空,也就是一直回车确认:

ssh-keygen -t rsa -P ” -f ~/.ssh/id_rsa

生成的文件在~/.ssh/目录下,我们会看到这些文件:

id_rsa // 私钥文件 id_rsa.pub // 公钥文件authorized_keys // 存放客户端公钥的文件known_hosts // 确认过公钥指纹的可信服务器列表的文件config // 指定不同域名使用哪个密钥的配置文件

一台机器即能是客户端,又能是服务端,因此同时存在authorized_keys(在该机器为服务端时使用)和Known_hosts(在该机器为客户端时使用)。

b. 将本地的公钥上传至远程服务器的用户信任列表

ssh-copy-id root@hadoop02ssh-copy-id root@hadoop03

免密登入hadoop02:

免密登入hadoop03:

如果有更改则删除,重新生成

发表评论

登录后才能评论