Linux的SSH免密登录(一)
1.从cp/scp命令出发
scp(secure copy)
是linux
系统下基于ssh
登录进行安全的远程文件拷贝的命令。
1. 传递文件到远程
scp local_file remote_username@remote_ip:remote_file
2. 传递文件夹到远程
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这些协议采用明文传输,会引入许多的安全性问题:
telnet使用23号端口,所有的信息,包括用户名和密码都是明文传输,并不安全。
而ssh使用22号端口,所有的信息都会被加密传输,保证了安全性。
$ssh user@hostname
user@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@hadoop02
ssh-copy-id root@hadoop03
免密登入hadoop02:
免密登入hadoop03:
如果有更改则删除,重新生成
Linux的SSH免密登录(一)的更多相关文章
- Linux 双向 SSH 免密登录
原理 双向,顾名思义,双方互通,此处的意思是多台 linux 两两免密登录.双向比单向多了些操作,单向只需把某一个linux的公钥发送给其他linux即可,而双向要实现集群中的每一台机器都保存其他所有 ...
- 【Linux】ssh免密登录
一.ssh免密配置 ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例.有机器A(192.168.1.155),B(192.168. ...
- linux 远程ssh免密登录
写在前面 先说说需求: 我们平时开发.运维操作linux过程中经常需要实现将远程文件拷贝到本地或者本地文件拷贝到远程:执行远程命令等操作:这个时候建立ssh免密登录应该是一个比较好的选择: 原理 在l ...
- linux上ssh免密登录原理及实现
因为我的服务器集群需要回收日志到中央进行统一处理,所以需要建立ssh互信关系实现免密登录.关于ssh的使用大家可能都很熟悉了,我们今天主要来讲下ssh连接和免密登录的原理. scp 传输文件 scp( ...
- linux服务器ssh免密登录
环境:两台服务器,Park01.Park02,配置ssh免密登录 在Park01执行:ssh-keygen 然后一直回车 生成节点的公钥和私钥,生成的文件会自动放在/root/.ssh目录下 然后 ...
- Linux的SSH免密登录认证过程研究
一.先看下SSH免密登录使用到的工具和生成的文件 工具:ssh-keygen用于生成秘钥文件,其中秘钥分为公钥和私钥.ssh-copy-id用于复制公钥文件到被控制机. 文件:ssh-keygen生成 ...
- Linux入门——SSH免密登录
SSH免密登录 1.简介 SSH是一种网络协议,用于计算机之间的加密登录. 本文针对的实现是OpenSSH,它是自由软件,应用非常广泛. 2.初始化公钥私钥 有rsa,dsa两种加密方式,生成的公钥私 ...
- Linux机器间ssh免密登录
前言 一台Linux机器通过ssh的方式连接别的机器或通过scp的方式传输文件,都需要输入密码. 为了解决每次输入密码的困扰,可采用添加密钥的方式实现. 实现过程 源服务器A,目标服务器B. 1.在源 ...
- linux 配置ssh免密登录
一.SSH概念(百度) SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH 是目 ...
随机推荐
- 学习笔记:CentOS 7学习之十二:查找命令
目录 1.which-whereis-locate-grep-find查找命令 1.1 which 1.2 whereis 1.3 locate 1.4 grep 1.5 find命令 2. 命令的判 ...
- PAT(Advanced Level)1055.The World's Richest
Forbes magazine publishes every year its list of billionaires based on the annual ranking of the wor ...
- django进阶版2
目录 批量插入数据 自定义分页器 创建多表关系的3种方法 全自动 全手动 半自动 form组件 如何渲染页面 第一种方式 第二种方式 第三种方式 如何显示错误信息 forms组件钩子函数 局部钩子 全 ...
- C++字符转换等常用方法
下面是C++中字符编码格式转换(包括ANSI转换为UTF8,UTF8转换为ANSI,ANSI转换为unicode,unicode转换为ANSI,UTF8转换为unicode,unicode转换为UTF ...
- Java lesson16homework
package lesson16; /** * 1. 随机生成4个0到9的整数,组成一个序列(使用LinkedList<Integer>存储) 例如:3 6 4 4 2. 然后要求用 ...
- 随便----js参考书
一.Javascript方面的书籍: 1 JavaScript权威指南(第6版):号称javascript圣经,前端必备:前端程序员学习核心JavaScript语言和由Web浏览器定义的JavaScr ...
- 不同格式的YUV 和 RGB互转
YUV色彩空间: Y是亮度值,也就是说8位的灰度值即可组成一幅黑白图像,黑白电视机就是这样的. UV是色彩值,是给Y上色用的.U是Cb也就是RGB中的蓝色分量,V是Cr也就 ...
- Hive SQL查询效率提升之Analyze方案的实施
0.简介 Analyze,分析表(也称为计算统计信息)是一种内置的Hive操作,可以执行该操作来收集表上的元数据信息.这可以极大的改善表上的查询时间,因为它收集构成表中数据的行计数,文件计数和文件大小 ...
- java启动server时报端口无效解决方法
今天在Java里配置Tomcat服务器,启动时出现如下图报错信息 The server cannot be started because one or more of the ports are i ...
- 获取url传来的参数
//根据传递过来的参数name获取对应的值 function getParameter(name) { var reg = new RegExp("(^|&)" + nam ...