【Linux】SSH协议应用


SSH

简介

SSH(secure shell)只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。这里只讨论SSH在Linux Shell中的用法。如果要在Windows系统中使用SSH,会用到另一种软件PuTTY,这需要另文介绍。

💧CSDN@划过手的泪滴t


SSH之所以能够保证安全,原因在于它采用了公钥加密

整个过程是这样的:

(1)远程主机收到用户的登录请求,把自己的公钥发给用户。

(2)用户使用这个公钥,将登录密码加密后,发送回来。

(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

这个过程本身是安全的,

但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。

可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。

再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。

这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)。

实现

OpenSSH

SSH协议有诸多的实现软件,广泛使用的SSH实现软件是OpenSSH。OpenSSH是SSH协议的一种开源实现,现在已经成为Linux、Unix等操作系统的SSH协议默认实现。

ssh中的四个文件

  • id_rsa:私钥
  • id_rsa.pub:公钥
  • known_hosts:存储的是远端主机的公钥
  • authorized_keys:存储的远端主机的公钥

~/.ssh文件路径

~/.ssh是存放SSH客户端相关配置和密钥文件的目录,但是第一次使用ssh的时候这个目录一般是空的,上述的konwn_hosts只有使用了ssh之后才会自动创建,然后其他主机发送公钥至本机之后,本机会生成authorized_keys文件用于存放相关的主机和密钥信息。如果想要对客户端的配置进行修改,也可以在该目录下创建config文件。

执行ssh-keygen命令创建密钥对,

ssh-keygen -t rsa -b 4096

密钥生成后会在当前目录下多出两个文件,id_rsa和id_rsa.pub,其中id_rsa是私钥(敲黑板:这个很重要,不能外泄),id_rsa.pub这个是公钥,把公钥拷贝到需要登录的远程服务器或Linux系统上,这里可以使用ssh-copy-id自动完成,也可以手动追加秘钥到远程服务器。

方法一(推荐):

ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.137

执行命令了会要求输入远程机器的密码,输入密码即可。

注:ssh-copy-id默认端口是22,如果您的SSH端口不是22,也就是远程服务器端口修改成其他的了,那就要得加上 -p +端口。

将上面生成的公钥id_rsa.pub追加到authorized_keys文件中:

cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

密钥准备好了接下来就可以使用密钥登录了,

ssh -i ./id_rsa root@192.168.1.116

实验解析

1、使用scp将d盘中的任意文件夹拷贝到linux中的/opt/a1

scp -r D:\tmp1\ root@192.168.0.137:/opt/a1

在这里插入图片描述

在这里插入图片描述

2、使用scp命令将d盘任意文件夹中以a开头的文件拷贝到linux的/opt/b1中

 scp -r D:\qqdata\313851039\FileRecv\a* root@192.168.0.137:/opt/b1

在这里插入图片描述

3、SSH密钥对登录实验,服务端为linux,客户端一台linux一台windows

ssh-keygen -b 1024 -t rsa
#执行命令的过程中是会提示呢输入密钥的密码

在这里插入图片描述

将生成的公钥以安全的方式传输到要登录的服务器

scp ~/.ssh/id_rsa.pub root@192.168.0.137:~/

Linux服务端

mkdir .ssh
cat id_rsa.pub >> ~/.ssh/authorized_key
chmod 600 /root/.ssh/authorized_keys
vim /etc/ssh/sshd_config
systemctl restart sshd
 ssh -i ./id_rsa.pub root@192.168.0.116

在这里插入图片描述

Windows

在这里插入图片描述

在这里插入图片描述

4、使用tcp-wrapper限制宿主机对服务端的连接

vim /etc/hosts.deny
#追加
sshd:192.168.0.106


在这里插入图片描述

相关推荐

  1. Dubbo协议支持哪些协议应用场景?

    2024-04-05 05:42:04       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-05 05:42:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-05 05:42:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-05 05:42:04       87 阅读
  4. Python语言-面向对象

    2024-04-05 05:42:04       96 阅读

热门阅读

  1. Chrony与NTP

    2024-04-05 05:42:04       40 阅读
  2. Python Django ORM使用简单的增,删,改,查

    2024-04-05 05:42:04       32 阅读
  3. 十九、Rust Tcp Rpc 示例

    2024-04-05 05:42:04       40 阅读
  4. C# 系统学习(异步编程)

    2024-04-05 05:42:04       40 阅读
  5. 数据结构——顺序表实现通讯录

    2024-04-05 05:42:04       31 阅读
  6. AI与技术美术(TechArt)

    2024-04-05 05:42:04       33 阅读
  7. 什么是机器学习?

    2024-04-05 05:42:04       33 阅读
  8. 机器学习之常用的回归预测模型

    2024-04-05 05:42:04       34 阅读