zoukankan      html  css  js  c++  java
  • 构建SSH服务

    什么是SSH?
    简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
    SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。这里只讨论SSH在Linux Shell中的用法。如果要在Windows系统中使用SSH,会用到另一种软件PuTTY,这需要另文介绍。

    中间人攻击
    SSH之所以能够保证安全,原因在于它采用了公钥加密。
    整个过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
    这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。
    可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的"中间人攻击


    构建SSH远程管理
    ---------SSH服务器-------------Client---------
    192.168.1.1 192.168.1.100
    一、密码验证
    root@localhost ~]# vi /etc/ssh/sshd_config 修改:
    Port 22
    Protocol 2
    ListenAddress 192.168.1.1
    UseDNS no
    PermitRootLogin no
    PermitEmptyPasswords no
    LoginGraceTime 2m
    MaxAuthTries 6
    AllowUsers hehe xixi@192.168.1.100 客户端验证:
    [root@localhost ~]# ssh 192.168.1.1
    [root@localhost ~]# ssh hehe@192.168.1.1
    [root@localhost ~]# ssh haha@192.168.1.1
    [root@localhost ~]# ssh xixi@192.168.1.1
    二、秘钥对验证
    例如:
    ssh-keygen -b 4096 -t dsa
    客户端:
    [root@localhost ~]#ssh-keygen
    [root@localhost ~]#ssh-copy-id -i /home/hehe/.ssh/id_rsa.pub root@192.168.1.1
    注意:ssh-copy-id:把密钥追加到远程主机的 .ssh/authorized_key 上
    [root@localhost ~]#ssh root@192.168.1.1
    或者
    [hehe@localhost .ssh]$ ssh-keygen
    [hehe@localhost .ssh]$ scp id_rsa.pub root@192.168.1.1:/root/
    注意:在上传公钥时,不要关闭密码验证,否则将无法上传。
    服务器端:
    [root@localhost ~]# vim /etc/ssh/sshd_config
    修改:
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
    [root@localhost ~]#cp /root/id_rsa.pub /root/.ssh/authorized_keys
    增加其他用户
    [root@localhost ~]#cat id_rsa.pub >> .ssh/authorized_keys
    [root@localhost ~]# service sshd restart
    客户端验证:
    [hehe@localhost .ssh]$ ssh root@192.168.1.1 结论:不使用密码。而是使用秘钥对验证登录。
    思考:如果客户端lisi用户,把公钥拷贝到了服务端han用户下。将会怎么样?
    (lisi用户ssh han@192.168.56.200时无需密码)
    结论希望哪个用户免密码就拷贝到哪个用户。
    -----------------------------------
    远程执行命令:ssh root@192.168.56.200 date
    -----------------------------------
    讲解scp命令
    1、本地--->>>---服务器(类似上传)
    文件:
    [root@localhost ~]# scp 222.txt root@192.168.1.1:/root
    目录:
    [root@localhost ~]# scp -r /root/hehe root@192.168.1.1:/root
    2、服务器--->>>---本地(类似下载)
    文件:
    [root@localhost ~]# scp root@192.168.1.1:/root/222.txt ./
    目录:
    [root@localhost ~]# scp -r root@192.168.1.1:/root/hehe ./


    ---------------------------------------------------------------------------------------
    1. ssh命令用法
    连接到远程主机
    # ssh root@192.168.1.120 // 默认连接到目标主机的tcp 22端口

    连接到其他ssh端口
    # ssh -p 10022 root@192.168.1.120

    连接到远程主机,并执行一条命令
    # ssh root@192.168.1.120 ls -l

    在ssh命令后面,直接加上在远程主机上要执行的命令。

    打开调试模式
    # ssh -v root@192.168.1.120

    -v参数追踪调试建立的SSH连接,可以看到在哪个环节出了问题。

    对所有数据请求压缩
    # ssh -C root@192.168.1.120

    所有通过ssh发送或接收的数据将会被压缩,并且仍然是加密的。

    指定ssh源地址
    如果你的ssh客户端有多于两个以上的IP地址,可以使用-b选项来指定一个IP地址。这个IP将会被用做建立连接的源地址。

    # ssh -b 192.168.0.200 root@192.168.1.120

    查看是否已经添加了对应主机的ssh密钥
    # ssh-keygen -F 192.168.1.120

    删除对应主机的ssh访问密钥
    # ssh-keygen -R 192.168.1.120

    也可以在主机的~/.ssh/known_hosts文件中手动删除公钥。

    -----------------------------------------------------------------
    ----------------------------------------------------------------
    如果觉得这篇文章对您有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
    本文版权归作者和博客园共有,欢迎转载哦;如博文中有任何错误,欢迎博客们留言或联系本人,本人尽快修改。
    谢谢大家支持! ! !
    ------------------------------------------------------------------
  • 相关阅读:
    事务
    触发器
    入行大数据必须知道的事!
    5G如何使云计算更加前卫
    2021年加密货币和区块链风向
    2020年数据存储管理发生的7种变化
    如何克服物联网中数据集成的挑战
    从开发到产出:关于机器学习的七则干货建议
    如何利用机器学习进行静态分析
    AI如何改变DevOps?
  • 原文地址:https://www.cnblogs.com/luoyan01/p/9733656.html
Copyright © 2011-2022 走看看