SSH远程登录协议

本文详细介绍了SSH服务,包括其基础概念、公钥传输原理、加密通信方式(对称和非对称)、登录过程、服务端配置,以及如何通过密钥实现免密登录。还提供了实际案例和最佳实践,如修改端口、禁止root登录、白名单/黑名单管理等。
摘要由CSDN通过智能技术生成

SSH远程登录协议

一.SSH服务

1.SSH基础

SSH服务器

SSH是一种安全通道协议,主要用于字符界面的远程登录,控制等,SSH协议会对双方通信数据进行加密,包括用户登录输入的口令,SSH是建立在应用层和传输层基础上的安全协议,对数据有着加密,压缩的优点,安全快速。

常见SSH协议

ssh软件包 openssh

ssh协议

centos7自带的软件,开机自启, sshd 服务默认使用的是TCP的22端口,安全协议版本sshv2,出来2之外还有1(有漏洞)ftp 20 21,帮助我们实现远程连接

配置文件

/etc/ssh/

服务端配置文件

sshd_config

客户端配置文件

ssh_config

客户端:
Linux Client: ssh, scp, sftp,slogin

Windows Client:xshell, MobaXterm,putty, securecrt, sshsecureshellclient

SSH服务器主要包括SSH远程连接和ftp文件传输服务

相较于telnet,SSH更加安全,telnet的数据是明文传输的

ecdsa 代表加密算法 pub代表公钥

2.公钥传输原理

1.客户端发送连接请求

2.服务端返回自己的公钥x,以及一个会话id

3.客户端生成一个密钥对

4.客户端会用自己的公钥和会话id计算出一个res值,并用服务端的公钥加密

5.客户端发送加密值给服务端,服务端用私钥解密,得到res

6.服务端将解密后的res通过会话id计算出客户端的公钥

7.最终,双方都拥有三个密钥(自己的公私密钥和对方的公钥),之后通信的数据都会加密

加密通信原理

对称加密
概念
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用

常用算法
在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等

1.加密方和解密方使用同一个密钥;
2.加密解密的速度比较快,适合数据比较长时的使用;
3.密钥传输的过程不安全,且容易被破解,密钥管理也比较麻烦

优缺点
对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。

对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了

收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担

非对称加密
概念
非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

常用算法

RSA(RSA algorithm):目前使用最广泛的算法

DSA(Digital Signature Algorithm):数字签名算法,和 RSA 不同的是 DSA仅能用于数字签名,不能进行数据加密解密,其安全性和RSA相当,但其性能要比RSA快

ECC(Elliptic curve cryptography,椭圆曲线加密算法)

ECDSA:Elliptic Curve Digital Signature Algorithm,椭圆曲线签名算法,是ECC和 DSA的结合,相比于RSA算法,ECC 可以使用更小的秘钥,更高的效率,提供更高的安全保障

优缺点
相比于对称加密技术,非对称加密技术安全性更好,但性能更慢。

此本次实验中,我们用非对称加密算法ECDSA进行加密,为了方便用root用户,也可给其他普通用户配置

3.登录

选项说明
-l指定登录名称
-p指定登录端口(
-t可以强制SSH连接为交互式会话,并在远程终端上执行命令
[root@localhost ssh]#ssh -l root 192.168.82.101
Last login: Fri Aug  4 15:54:25 2023 from 192.168.82.1

[root@localhost ssh]#ssh -l root 192.168.82.101 hostname
root@192.168.82.101's password: 
localhost.localdomain
//可以直接在后面跟上命令,这样被远程登录的终端会执行并反馈

4.服务端配置

[root@yyds ~]#vim /etc/ssh/sshd_config    //服务端配置
#Port 22    //注释默认配置端口为22

#ListenAddress 0.0.0.0
//表示监听所有地址的安全建议,如果不需要公网ssh访问,可以更改为内网网段

#LoginGraceTime 2m
//如果用户登录失败,在切断前服务器等待时间,默认单位秒

#PermitRootLogin yes
//默认,ubuntu不允许root远程登录,虽然禁止root登录,但是仍然可以su root切换

#StrictModes yes
//检查.ssh/文件的属主,权限等

#MaxAuthTries 6
//最大登录失败次数

#MaxSessions 10
//同一个连接最大会话

#PubkeyAuthentication yes
//基于key验证

#PermitEmptyPasswords no
//密码验证,根据不同的安全级别需求,可以设置为no,使用认证的密钥登录

#PasswordAuthentication yes
//基于用户密码登录

#GatewayPorts no
#ClientAliveInterval 0
//秒
#ClientAliveCountMax 3
//默认3
#UseDNS no
//内网环境不使用DNS

GSSAPIAuthentication yes
//提高速度可改为no
#MaxStartups 10:30:100
//未认证连接最大值

//以下可以限制可登录用户的办法:白名单  黑名单
AllowUsers user1 user2 user3@ip(限制主机)
DenyUsers user1 user2 user3
AllowGroups g1 g2
DenyGroups g1 g2

注意,白名单和黑名单不要同时使用

5.实际案例

修改端口

[root@localhost ~]#vim  /etc/ssh/sshd_config
//在17行修改自己默认的端口
Port 9966

禁止root登录

[root@localhost ~]#vim  /etc/ssh/sshd_config
//在38行no改为yes
PermitRootLogin no
//登录用户依然可以su切换到root,所以需要修改pam模块
[root@localhost ~]#vim /etc/pam.d/su
//开启第6行
auth            required        pam_wheel.so use_uid

白名单黑名单

[root@localhost ~]#vim /etc/ssh/sshd_config
//在最后一行添加相应规则
AllowUsers zhangsan@192.168.82.101
DenyUsers lisi
//只允许192.168.82.101的zhangsan登录,拒绝所有lisi用户登录

密码错误限制

[root@localhost ~]#vim  /etc/ssh/sshd_config
//第40行修改密码错误后限制登录次数
 40 #MaxAuthTries 6
修改后取消注释

ssh服务的最佳实践

  1. 建议使用非默认端口 22
  2. 禁止使用protocol version 1
  3. 限制可登录用户 白名单
  4. 设定空闲会话超时时长
  5. 利用防火墙设置ssh访问策略
  6. 仅监听特定的IP地址 公网 内网
  7. 基于口令认证时,使用强密码策略,比如:tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12| xargs
  8. 使用基于密钥的认证
  9. 禁止使用空密码
  10. 禁止root用户直接登录
  11. 限制ssh的访问频度和并发在线数
  12. 经常分析日志 分离

6.使用密钥实现免密登录

客户端生成公钥和私钥,将其发送给服务端,实现免密登录

具体流程:

1.客户端生成一对密钥

2.将密钥拷贝给服务端

3.客户端再次发送请求,ip用户名

4.服务端得到请求会在authorized_keys()中查找,如果有对应的ip用户名,会随机生成字符串

5.服务端使用拷贝过来的客户端公钥加密,发送给客户端

6.客户端得到后用私钥解密,将解密后的字符串发送给服务端

7.服务端收到后确认,如果一致,进行连接

//客户端
[root@localhost slaves]#ssh-keygen
//生成密钥
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:8kQVLIMFhk4ijPN5VCz4fdVVgP5rEMrIw+tua5nQ6zo root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|o  . +++..oo ooo.|
|+.o =.o o.o o    |
| + B o  .+ .     |
|  o + ...   o    |
|   .  .=So . o   |
|      .+* o . .  |
|       ..*   . . |
|      E B     o  |
|      .O=.   .   |
+----[SHA256]-----+
[root@localhost slaves]#ssh-copy-id -i 192.168.82.100
//将密钥拷贝给服务端
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.82.100 (192.168.82.100)' can't be established.
ECDSA key fingerprint is SHA256:Y9D1HHeRVrLCyUNjSBLfBTwKMhzmLjcjSdvX3inDFzc.
ECDSA key fingerprint is MD5:f7:aa:91:02:77:58:28:62:02:7d:c6:85:c7:47:a3:97.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.82.100's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '192.168.82.100'"
and check to make sure that only the key(s) you wanted were added.

[root@localhost slaves]#ssh 192.168.82.100
//进行免密登录
Last login: Sun Aug  6 14:29:54 2023 from 192.168.82.1


7.ssh客户端

scp远程安全复制

sftp安全ftp下载

[root@localhost network-scripts]#sftp 192.168.82.100
Connected to 192.168.82.100.
sftp> get /data/aaaaa     //下载到当前文件夹
Fetching /data/aaaaa to aaaaa
sftp> ls       //查看当前目录下文件列表
anaconda-ks.cfg         bin                     core.2414               initial-setup-ks.cfg    下载                  
公共                  图片                  文档                  桌面                  模板                  
视频                  音乐      




更多用法:
上传
put   #默认时会上传到/root 
put  /home/    上传到home下

查看可用命令
help  //查看sftp可使用的命令和用途

打印服务器当前位置
pwd     //打印当前服务器所在位置
lpwd    //打印当前本地位置

切换目录
cd     //切换服务器上的目录

下载文件、退出sftp
get         //下载文件
get -r      //下载目录
quit        //退出sftp
put         //上传文件
put -r      //上传文件夹
退出命令:quit、exit、bye都可以
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值