SSH
Table of Contents
1 加密解密
对称加密
简单的说,即加密和解密明文使用相同的密码,如AES(DEC目前被认为是不安全的)
非对称加密
使用不同但却完全匹配的一对钥匙————公钥和私钥。公钥是公开的,私钥只有解密者才知道。
加密明文使用公钥加密,解密密文时只有匹配的私钥才可解开。如RSA、DSA
2 SSH介绍
SSH协议
SSH为Secure Shell缩写,为远程登录会话和其它网络服务提供安全性的协议。
SSH主要由三部分组成:
- 传输层协议[SSH-TRANS]
提供服务器认证,保密性及完整性。通常运行在TCP/IP连接上。该协议中的认证基于主机,
并且该协议不执行用户认证 - 用户认证协议[SSH-USERAUTH]
用于向服务器提供客户端用户鉴别功能。运行在传输层协议上 - 连接协议[SSH-CONNECT]
将多个加密隧道分成逻辑通道。运行在用户认证协议上。提供交互式登录话路、远程命令执行
、转发TCP/IP连接和转发X11连接
版本
SSH由客户端和服务端软件组成,有两个不兼容的版本分别是1.x和2.x。用2.x
验证原理
- 基于口令的安全验证
使用账号和口令登录远程机,但不能保证所连接的服务器就是你想连接的服务器。可能会有
别的服务器冒充,即受到“中间人”攻击 - 基于秘钥的安全验证
- 创建一对秘钥,将公钥置于SSH服务器
- 客户端向服务器发送请求,请求用公钥进行安全验证
- 服务器收到请求,找到你的公钥,然后和你发送过来的公钥进行对比
- 若一致,服务器用公钥加密质询“challenge”,并发送给客户端
- 客户端收到质询后用私钥解密,再发送给服务器
3 SSH工作过程
服务器建立公钥
若服务器是新系统,则会在/etc/ssh下生成一个名为ssh_host_ecdsa_key.pub公钥和
和一个ssh_host_ecdsa_key私钥,这一对就是远程服务器的公钥与私钥。每次启动sshd
服务时,系统会自动在此路径下查找公钥。
客户端请求连接
客户端发起一个TCP连接,默认端口号为22
- Linux可直接通过ssh user@host连接
若客户端和服务器是相同的用户,则可以省去user - windows下可通过putty,xshell工具等连接
服务器响应客户端
服务端收到连接请求后,将自己的关键信息发给客户端
- 服务器端的公钥
客户端在收到公钥后,会在自己的“~/.ssh/known_hosts”中进行搜索。若位找到则在终端
显示一段警告信息,由用户来决定是否继续连接 - 服务器所支持的加密算法列表
客户端根据此列表来决定采用哪种加密算法
生成会话秘钥
此时客户端拥有了服务端的公钥,然后客户端和服务端需要协商出一个双方都认可的秘钥,以此
来对双方后续的通信内容进行加密。
秘钥协商算法Diffie-Hellman
- 服务端和客户端共同选定一个大素数,叫做种子值
- 服务端和客户端各自独立地选择另外一个只有自己才知道的素数
- 双方使用相同的加密算法,由种子值和各自的私有素数生成一个秘钥值,并将这个值发送给
对方 - 收到秘钥值后,服务端和客户端根据种子值和自己的私有素数,计算出一个最终的秘钥。
该步骤由双方分别独立进行,但是得到的结果应该是相同的 - 双方使用上一步得到的结果作为秘钥来加密和解密通信内容
服务端验证客户端合法性
接下来,客户端将自己的公钥ID发送给服务端,服务端需要对客户端的合法性进行验证
- 服务端在自己的“authorized_keys”文件中搜索与客户端匹配的公钥
- 若找到,服务端用这个公钥加密一个随机数,并把加密后的结果发送给客户端
- 如果客户端持有正确的私钥,那么它就可以对消息进行解密从而获得这个随机数
- 客户端由这个随机数和当前的会话秘钥共同生成一个MD5值,并发送给服务端
- 服务端同样会计算MD5,并与客户端发过来的值进行比较,若相等则验证通过
双方即可开始正常通信
4 Linux/FreeBSD设置
-
创建.ssh文件夹
mkdir ~/.ssh
-
产生秘钥
ssh-keygen -t rsa -P "密码提示语"
-
authorized_keys
cp id_rsa.pub authorized_keys chmod 600 authorized_keys chmod -R 700 .ssh
-
sshd_config
# vim /etc/ssh/sshd_config # 仅使用SSH2 protocol 2 # 不允许root用户使用SSH PermitRootLogin no # 不允许使用密码方式登陆 PasswordAuthentication no # 禁止空密码进行登陆 PermitEmptyPasswords no # 启用RSA认证 RSAAuthentication yes # 启用公钥认证 PubkeyAuthentication yes # 使用authorized_keys AuthorizedKeysFile .ssh/authorized_keys
-
重启服务
service sshd restart
5 远程连接工具
服务端保留公钥,客户端保留私钥
windows putty & psftp
putty设置
- Session
- Host name(or IP address) :192.168.0.xxx
- Port : 22
- Connection type : SSH
- Connection->SSH->Auth
- Private key file for authentication : "D:\keys dir\xxx.ppk"
- save Session
- Session->Saved Sessions(添加会话名,如test)->save
- 下次启动putty后直接load会话名即可
puttygen生成秘钥对
- Parameters
- Type of key to generate : RSA
- Number of bits … : 2048
- Actions
- Generate a public/private key pair
puttygen秘钥格式转换
- putty有自己的秘钥格式,以.ppk结尾
- 打开puttygen转换ppk格式
- Actions->Load an existing private key file->save public/private key
PSFTP传输文件
打开psftp,help显示指令
#打开名为test的已保存的会话
psftp> open test
#从远程机下载文件
psftp> get remote_host_file
#上传文件到远程机
psftp> put local_file
windows Xshell & Xftp
windows SecureCRT
暂且这样
作者:混吃等死
-------------------------------------------
个性签名:混吃等死
-------------------------------------------
日常总结,均为原创,欢迎交流,转载请注明