什么是ssh

ssh是一套网络协议,目的在于保证安全的网络服务以及加密远程登录信息。
linux的ssh命令是实现了ssh协议的一个操作,并且以sshd服务的形式在linux上运行。
对ssh协议管理的开源软件是主流的openssh工具。

为什么要用ssh

当使用ssh协议连接一台机器时,我们与其之间的数据是加密的,这个登录方式很安全。即使被抓取到了信息,黑客也无法破解你的密码。
以前运维人员都是用FTP协议和telent工具进行服务器登录,这两个是基于明文传输的,很容易被抓取到数据,而且数据几乎是暴露在互联网中,会对服务器造成安全隐患。
为了登录,数据传输时的安全性,加密性,因此出现了两种主流的加密方式。

  • 对称加密 使用同一个要是对数据进行加密,解密也要用这个。
  • 非对称加密 两把钥匙,一个公钥,一个私钥。公钥是锁,密钥是开锁的钥匙

对称加密

账号密码登录——通过密钥加密——加密数据发给服务器——服务器通过密钥解密——登录成功

对称加密强度高,难以破解,但是当机器特别大,你得大量发送单个密钥时,这个时候安全就无法很好的保障了。但凡丢一个,其他的主机安全性就会出现问题。

非对称加密

对称加密有一个密钥,非对称加密有一对密钥(公钥,私钥)。
公钥如同一把锁,私钥就是开锁的钥匙。除非私钥丢失,否则被破解的概率非常低。
ssh登录——服务器接收后发送给用户公钥——用户接收到服务器的公钥——公钥对请求进行加密——加密后再次发给服务器——服务器接收到加密信息使用私钥解密——验证用户密码无误,进入服务器。

中间人攻击

用户访问服务器——被黑客拦截使用假的公钥——公钥加密后黑客再接收到用户数据并用私钥解密——此时黑客就获得了你的账号密码。

  1. 1.拦截客户的登录请求
  2. 2.向客户端发送自己的假的公钥,此时客户端如果不知情的情况下,使用该假公钥对数据加密处理
  3. 3.客户端发送自己的数据给了黑客,拿到了数据,再用自己的私钥进行解密
  4. 4.客户端的账号密码此时已经被黑客获取。

如何避免登录服务器时的安全隐患

如何保证服务器的目标正确
[基于口令的]

  1. ssh-keyscan -t ecdsa 192.168.218.162 | ssh-keygen -lf - #扫描远程服务端的指纹信息
  2. 通过ssh连接时的SHA265对比

image.png

[ssh重要的配置文件]

  1. ssh相关的配置文件主要放在该目录
  2. $HOME/.ssh/

ssh常见配置文件,作用如下:

  • Know_hosts:当客户端接收到了服务器的公钥后,服务器的公钥信息就被记录在了该文件中,也就代表着客户端相信了该服务器的公钥信息,以便于下次连接,不再需要一个确认过程。
  • authorized_keys:该文件是服务器将客户端的公钥信息保存在这个文件中。
  • id_rsa: 私钥文件,存放了私钥的密码
  • id_rsa.pub:是公钥文件,存放公钥的密码信息

登录Linux服务器的形式

[基于口令]

  1. 直接账号密码登录

[基于公钥的认证方式登录]
基于公钥认证登录,可以实现免密登录,减少运维人员的心智负担。

  1. 1.客户端发送自己的公钥给服务器,写入到服务器的authorized_keys文件中
  2. 2.服务器接收到客户端的连接请求后,在自己authoriz_keys中匹配,看是否存在该客户端的公钥信息,如果存在就生成一个随机数R,再用客户端的公钥针对随机数进行加密,得到一个加密后的随机数 公钥(R) pubkey(R)
  3. 3.客户端通过自己的私钥对pubkey(R)进行解密,得到一个加密后的随机数再针对这个随机数R和当前连接会话sessionkey采用MD5加密方式,生成摘要Diest1,再次发送服务器进行验证。
  4. 4.服务器针对这个随机数Rsessionkey也采用同样的摘要算法计算得出Digest2
  5. 5.服务器对比 Digest1 Digest2 是否一致 一致则通过 登录服务器成功

SSH免密登录实战

  1. 1.客户端生成一对公钥私钥
  2. ssh-keygen -t rsa
  3. 2.客户端发送自己的公钥发送给服务器,存在服务器的authorized_keys文件中
  4. ssh-copy-id root@192.168.218.155
  5. 3.此时就可以免密登录了
  6. ssh root@192.168.218.155
  7. 4.检查用户的公钥
  8. cat ~/.ssh/authorized_keys

服务器安全与sshd配置

在生产服务器下,运维人员一般都会禁止root用户登录服务器,最大程度的保障服务器的安全和被黑客攻击的几率,以及修改ssh的远程连接接口。

  • 修改ssh端口 Port 1022
  • 禁止root登录 PermitRootLogin no
  • 禁止用密码登录,只能被信任的机器登录,用公钥进行登录 PasswordAuthentication no
  • 设置sudoers ```shell vim /etc/ssh/sshd_config Port 1022 #修改ssh端口 AddressFamily any #支持ipv4和ipv6登录 ListenAddress 0.0.0.0 #监听该机器的所有网卡 PermitRootLogin no #禁止root用户登录 PasswordAuthentication no #禁止密码登录 PubkeyAuthentication yes #是否允许公钥登录 AuthorizedKeysFile .ssh/authorized_keys #自定义公钥的存放文件

此时千万不要重启服务

需要创建配置公私钥

vim /etc/sudoers liao123 ALL=(ALL) ALL

ssh liao@192.168.218.100 -p 1022 #使用该命令即可登录 ```