Linux中ssh

ssh原理

SSH(Secure Shell)是一种用于安全访问远程计算机的网络协议。SSH使用加密技术来确保通信的安全性,其中包括使用公钥加密和私钥解密的方法。下面是SSH公钥传输的基本原理:

  1. 生成密钥对:在使用SSH进行通信之前,首先需要在客户端生成一对密钥,包括公钥和私钥。通常使用RSA或DSA算法生成密钥对。

  2. 发送公钥:生成密钥对后,客户端将公钥发送给服务器。这通常是通过将公钥添加到服务器上的authorized_keys文件中来完成的。公钥是一个长字符串,用于加密数据。

  3. 验证身份:当客户端连接到服务器时,服务器会向客户端发送一个随机的挑战字符串。

  4. 加密挑战:客户端收到挑战后,使用自己的私钥对挑战字符串进行加密,并将加密后的结果发送回服务器。

  5. 验证签名:服务器收到加密后的挑战字符串后,使用客户端之前发送的公钥进行解密,得到原始的挑战字符串。然后,服务器将此字符串与自己之前发送的挑战字符串进行比较。如果两者匹配,则客户端被验证为合法用户。

总之,ssh采用非对称加密,在A向B发送消息时,使用B的公钥加密,B收到后使用B的私钥解密。

ssh客户端登录

ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p port
ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p port

 如果不指定登录用户则使用root用户登录,ssh的默认端口为22,如果服务器的ssh端口没有修改,则可以不写端口号。

~/.ssh/known_hosts

在登录后,对端的公钥信息会保存在上面这个文件中。

 ssh服务端配置

ssh的客户端和服务的的配置文件不同:

vim /etc/ssh/ssh_config  #客户端配置文件
vim /etc/ssh/sshd_config  #服务端配置文件

配置前还需要将selinux关闭或调为宽松模式。

常用配置项

[root@ky15-1 ~]# vim /etc/ssh/sshd_config 
17  Port    22   
#生产建议修改   

ListenAddress ip
#监听地址设置SSHD服务器绑定的IP 地址,0.0.0.0 表示侦听所有地址安全建议:如果主机不需要从公网ssh访问,可以把监听地址改为内网地址 这个值可以写成本地IP地址,也可以写成所有地址,即0.0.0.0 表示所有IP。

LoginGraceTime 2m
#用来设定如果用户登录失败,在切断连接前服务器需要等待的时间,单位为秒

PermitRootLogin yes 
#默认 ubuntu不允许root远程ssh登录

StrictModes yes   
#检查.ssh/文件的所有者,权限等

MaxAuthTries 
#用来设置最大失败尝试登陆次数为6


MaxSessions  10         
#同一个连接最大会话
PubkeyAuthentication yes     
#基于key验证

PermitEmptyPasswords no      
#密码验证当然是需要的!所以这里写 yes,也可以设置为 no,在真实的生产服务器上,根据不同安全级别要求,有的是设置不需要密码登陆的,通过认证的秘钥来登陆。


PasswordAuthentication yes   
#基于用户名和密码连接
GatewayPorts no
ClientAliveInterval 10 
#单位:秒
ClientAliveCountMax 3 
#默认3
UseDNS yes 
#提高速度可改为no   内网改为no  禁用反向解析
GSSAPIAuthentication yes #提高速度可改为no
MaxStartups    #未认证连接最大值,默认值10
Banner /path/file
#以下可以限制可登录用户的办法:白名单  黑名单
AllowUsers user1 user2 user3@ip(限制主机)
DenyUsers user1 user2 user3
AllowGroups g1 g2
DenyGroups g1 g2

实际操作

修改完配置文件后记得重启服务sshd。

1、修改默认端口

修改端口后需要在防火墙上放通端口;不能只放通ssh服务,因为ssh默认端口为22,这样新端口不会放通。

 2、禁止root登录

 这样修改后不能直接使用root登录:

 但是使用普通用户登陆后可以切换到root用户:

 所以我们需要修改pam认证模块:

vim /etc/pam.d/su

 开启第六行,这样之后只有root用户和wheel组内的用户可以切换用户,普通用户不能切换用户。

 可以将用户添加到附加组wheel,这样该用户可以切换用户:

 3、白名单黑名单列表

AllowUsers zhangsan@192.168.91.101  lisi   
#允许所有有的主机访问我的lisi用户
#只允许 zhangsan 从192.168.91.101上访问

4、输错密码限制

40 MaxAuthTries 2

[root@localhost ~]#ssh zhangsan@192.168.91.100 -p 9527
#默认次数3
zhangsan@192.168.91.100's password: 
Permission denied, please try again.
zhangsan@192.168.91.100's password: 
Received disconnect from 192.168.91.100 port 9527:2: Too many authentication failures
Authentication failed.
[root@localhost ~]# ssh -o NumberOfPasswordPrompts=8  root@192.168.91.100
#设置尝试次数为8 
root@192.168.91.100's password:

 ssh免密登录

  1. 首先在客户端生成一对密钥(ssh-keygen)

  2. 并将客户端的公钥ssh-copy-id 拷贝到服务端

  3. 当客户端再次发送一个连接请求,包括ip、用户名

  4. 服务端得到客户端的请求后,会到authorized_keys()中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:kgc

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

  6. 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端

  7. 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录

 可以通过-q选项选择加密方式。不选择则使用默认的rsa加密。

 将公钥文件发给服务端:

[root@localhost ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.146.150

 去服务端查看公钥文件:

 与客户端公钥文件相同:

  免密登录成功:

 

posted @ 2024-04-29 18:37  韩笑ky36  阅读(2)  评论(0编辑  收藏  举报