日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

万字详解SSH(SSH登录原理+SSH配置+模拟实现SSH免密登录)

發布時間:2024/1/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 万字详解SSH(SSH登录原理+SSH配置+模拟实现SSH免密登录) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、SSH概述
    • 1. 加密算法
      • 1)對稱加密算法(DES)
      • 2)非對稱加密(RSA)
      • 3) 對稱加密與非對稱加密區別
      • 4)中間人攻擊
    • 2. 環境準備
    • 3. SSH基于用戶名密碼的認證原理
    • 4. 小結
  • 二、模擬SSH服務搭建
    • 1. 搭建思路
    • 2. VMware環境準備
    • 3. 通過jumpserver 和 realserver搭建SSH服務器
      • 1. 關閉防火墻和SELinux
      • 2.配置yum源
      • 3. 配置靜態ip
        • 1)JumpServer網卡配置
        • 2)RealServer網卡配置
      • 4. openssh軟件的安裝
        • 1) 安裝
        • 2)獲取openssh生成的文件列表
        • 3)查看并修改ssh服務端的配置文件
  • 三、SSH服務任務解決方案
    • 1. 創建用戶并授權
    • 2. 測試用戶權限
    • 3. 禁用root遠程連接登錄
    • 4. 更改SSH默認端口
    • 5. 重啟SSH服務
    • 6. 在RealServer創建一個hhy賬號測試ssh
    • 7. SSH客戶端不驗證指紋
    • 8. 專業工具pwgen生成用戶密碼
    • 9. 踢出用戶
  • 四、SSH免密登錄解決方案
    • 1. ssh連接
    • 2. SSH免密登錄的具體實現
      • 1. 方法1(常用)
      • 2. 方法2(集群常用)


一、SSH概述

ssh是一種用于安全訪問遠程服務器的協議,遠程管理工具。對比起telnet,它更加的安全,那么它是如何保證安全的呢?

1. 加密算法

1)對稱加密算法(DES)

  • 小明想要給小紅發送信息一個信息A,為了安全起見,小明使用一種加密算法,比如給信息通過加一個數字B得到一個新的數字C,然后以公開的方式發送給小紅
  • 小紅接收到數字C后,通過減去一個數字B得到最終的真正的信息A
  • 小明發送給小紅的信息A稱為明文;加密后的信息C稱為密文;加密用的B稱之為密鑰
  • 加密算法(方法)可以很復雜,不一定是加和減,也可以是乘和除等等
  • 總結:

    • 發送方和接收方使用的是同一個密鑰來進行加密和解密

    • 發送方使用密鑰明文數據加密成密文,然后發送出去

    • 對稱加密里最關鍵的就是這個密鑰,客戶端和服務器需要約定好密鑰是啥

    • 如果是客戶端生成了密鑰,就需要通過網絡告知服務器,密鑰是啥

    • 密鑰本身也在網絡上文明傳輸,也容易被黑客獲取,一旦被黑客獲取到了了,后續的加密就失去了意義。

    2)非對稱加密(RSA)

    引入非對稱加密,使用非對稱加密來對對稱密鑰進行加密

  • 首先小紅會生成一對公鑰私鑰,把公鑰公開出去,自己保留私鑰
  • 當小明發送請求的時候,小紅會先把自己的公鑰發送給小明
  • 小明拿著小紅的公鑰通過加密算法將信息A加密成密文C,以公開的方式發送給小紅
  • 小紅收到密文C后,通過自己保留的私鑰將密文解密成最終的消息A
  • 這就是非對稱加密,加密使用的是公鑰,解密使用的是私鑰,使用不同的秘鑰進行加密和解密
  • 解密:

    • 發送方使用接收方發送過來的公鑰明文數據加密成密文,然后發送出去
    • 接收方收到密文后,使用自己本地保留的私鑰將密文解密成明文進行讀取

    3) 對稱加密與非對稱加密區別

    既然都有非對稱加密了,為啥還非得用對稱加密呢?

  • 對稱加密,成本是比較低(機器資源消耗少),速度也是很快的
  • 非對稱加密,成本比對稱加密高很多(機器資源消耗的多),速度也慢
  • 對稱加密使用同一個密鑰進行加密和解密,密鑰本身也在網絡上文明傳輸,也容易被黑客獲取
  • 非對稱加密,加密使用公鑰,解密使用私鑰。更加安全
  • 4)中間人攻擊

    通過非對稱加密的手段,確實是可以更安全的進行數據傳輸,但是還有點問題,就是客戶端是如何獲取到公鑰的?

    如何保證客戶端獲取到的公鑰是真實可靠的,而不是黑客偽造的?

    在https中可以引入證書來抵制中間人攻擊問題,那么ssh呢?

    2. 環境準備

    ip地址主機名稱主機身份
    192.168.44.129/24jumpserver跳板機
    192.168.44.130/24realserver正真正內部服務器

    3. SSH基于用戶名密碼的認證原理

    命令:ssh [選項] 遠程服務器的用戶名@遠程服務器的IP地址

    認證原理:

  • SSH服務端向SSH客戶端發送了一個登錄請求
  • SSH服務端將自己的公鑰發送給SSH客戶端
  • 示例:通過跳板機(jump)和主機(realserver)

    命令:ssh root@192.168.44.130

    如果是第一次訪問則會出現一下內容

    無法確認主機的真實性

    說明

    當客戶端輸入yes確認對方的公鑰指紋后,server端的公鑰就會被存放到客戶機的用戶家目錄里~/.ssh/known_hosts文件中,下次再訪問就直接通過密碼登錄,不需要再確認公鑰。

  • SSH客戶端使用服務端發過來的公鑰將自己的密碼加密并且發送給SSH服務端
  • SSH服務端收到SSH客戶端發過來的加密密碼后使用本地保留的私鑰進行解密
  • SSH服務端將解密出來的密碼和/etc/shadow文件里的用戶密碼對比認證
  • SSH服務端認證成功,則返回登錄成功結果,并發送一個隨機會話口令給客戶端,該口令用于后面兩臺主機進行數據傳輸的一個臨時加密會話口令
  • 4. 小結

    • SSH是Linux下遠程管理的工具,比telnet更安全
    • SH的全稱Secure Shell,安全的shell,是Client/Server架構,默認端口號為22,TCP協議
    • SSH其實用于商業,而OpenSSH即為開源的,在Linux中默認安裝

    二、模擬SSH服務搭建

    1. 搭建思路

  • 關閉防火墻和selinux
  • 配置網絡yum源或本地yum源
  • 軟件安裝和檢查
  • 了解并修改配置文件
  • 啟動服務檢查運行狀態設置開機自啟動
  • 2. VMware環境準備

    為了最大程度的保護公司內網服務器的安全,公司內部有一臺服務器做跳板機(JumpServer)。運維人員在維護過程中首先要統一登錄到這臺服務器,然后再登錄到目標設備進行維護和操作。由于開發人員有時候需要通過跳板機登錄到線上生產環境查看一些業務日志,所以現在需要運維人員針對不同的人員和需求對賬號密碼進行統一管理,并且遵循權限最小化原則

    ip地址主機名稱主機身份
    192.168.44.132(NAT)+ IPADDR=192.168.80.22(僅主機)jumpserver跳板機
    192.168.80.23 (僅主機)realserver正真正內部服務器

    3. 通過jumpserver 和 realserver搭建SSH服務器

    1. 關閉防火墻和SELinux

    關閉防火墻命令:systemctl stop firewalld
    關閉防火墻開機自啟:systemctl disable firewalld

    關閉selinux
    命令:setenforce 0
    修改配置文件永久關閉
    vim /etc/selinux/config
    SELINUX=disabled

    2.配置yum源

  • 把jumpserver主機配置外網yum源

    把/etc/yum.repos.d/目錄下的文件全部打包,再刪除除了壓縮文件的所有文件

    打包命令:tar -czf CentOS.tar.gz ./*


    配置阿里云yum源
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

    清理yum緩存
    yum clean all
    重新建立緩存
    yum makecache

  • RealServer配置本地YUM源 => 把光盤鏡像作為倉庫(自建YUM倉庫)
    掛載光盤
    創建目錄:mkdir /mnt/cdrom
    掛載:mount -o ro /dev/sr0 /mnt/cdrom

    給開機執行文件添加可執行權限
    命令:chmod +x /etc/rc.local

  • 往開機自啟文件里寫入開機自動掛載光盤
    命令:echo 'mount -o -ro /dev/sr0 /mnt/cdrom' >> /etc/rc.local

    rc.local:開機就會執行的文件

    備份/etc/yum.repos.d/下的文件,再把這些文及其全部刪除

    在 /etc/yum.repos.d下創建一個本地yum源配置文集local.repo 文件
    編輯配置文件

    #倉庫標識,名字隨意 [local] #倉庫名稱 name=local yum #倉庫路徑 file://表示本地路徑 baseurl=file:///mnt/cdrom #是否啟動該倉庫 1:啟動 0:不啟動 enabled=1 #是否檢測密鑰 gpgcheck=0

    清空原來的yum緩存:yum clean all
    創建新yum緩存:yum makecache
    列出可用倉庫:yum repolist

    3. 配置靜態ip

    1)JumpServer網卡配置

    注意:僅主機模式的ip要和Vmnet1在同一網段
    給JumpServer配置兩張網卡(NAT模式 + 僅主機模式)

    重啟網卡:systemctl restart network
    查看僅主機模式的網卡:ifconfig

    復制NET模式網卡的配置文件ens33,給僅主機模式的網卡ens36配置。
    命令:cp ifcfg-ens33 ./ifcfg-ens36


    編輯ens36網卡配置文件

    TYPE="Ethernet" BOOTPROTO="static" IPADDR=192.168.80.22 NETMASK=255.255.255.0 NAME="ens36" DEVICE="ens36" ONBOOT="yes"

    保存退出,重啟網卡
    systemctl restart network
    關閉NetworkManager
    Linux圖形化界面中的網絡管理器,有些時候我們設置了靜態IP。但是重啟網絡后,其并沒有生效或者和你設置的IP地址不一致,很可能是由于NetworkManager工具的影響。

    命令:systemctl stop NetworkManager
    命令:systemctl disable NetworkManager

    2)RealServer網卡配置

    注意:僅主機模式的ip要和Vmnet1在同一網段

    把NAT模式的網卡更改為僅主機模式,然后設置一個靜態IP地址。

    編輯/etc/sysconfig/network-scripts下的ens33網卡,保存退出重啟網卡

    TYPE="Ethernet" BOOTPROTO="static" IPADDR=192.168.80.23 NATMASK=255.255.255.0 NAME="ens33" DEVICE="ens33" ONBOOT="yes"

    測試聯通性,因為jumpserver和realserver都是僅主機模式,且在同一網段下,就可以ping一下

    用jump主機ping一下real主機

    4. openssh軟件的安裝

    1) 安裝

    SSH服務底層的軟件名稱叫做openssh,open開源,ssh就是ssh服務。openssh屬于C/S架構軟件,其擁有客戶端與服務器端。

    客戶端:ssh

    服務端:openssh-server

    把兩臺機器都安裝openssh

    命令:yum install openssh -y

    檢查openssh是否安裝成功
    命令:rpm -qa | grep openssh或者
    yum list installed | grep openssh

    2)獲取openssh生成的文件列表

    命令:rpm -ql openssh-server

    # 配置文件 /etc/ssh/sshd_config /etc/sysconfig/sshd #ssh服務的主配置文件# 服務管理腳本 /usr/lib/systemd/system/sshd.service# 文件共享服務 提供文件上傳下載的服務 /usr/libexec/openssh/sftp-server# 二進制文件程序文件 /usr/sbin/sshd# 公鑰生成工具 /usr/sbin/sshd-keygen# man手冊 /usr/share/man/man5/sshd_config.5.gz /usr/share/man/man8/sftp-server.8.gz /usr/share/man/man8/sshd.8.gz

    命令:rpm -ql openssh-clients

    # 客戶端配置文件 /etc/ssh/ssh_config# 遠程copy命令 服務器間進行文件傳輸 /usr/bin/scp# sftp客戶端 上傳下載文件操作 /usr/bin/sftp /usr/bin/slogin /usr/bin/ssh /usr/bin/ssh-add /usr/bin/ssh-agent /usr/bin/ssh-copy-id /usr/bin/ssh-keyscan # 客戶端man手冊 /usr/share/man/man1/scp.1.gz /usr/share/man/man1/sftp.1.gz /usr/share/man/man1/slogin.1.gz /usr/share/man/man1/ssh-add.1.gz /usr/share/man/man1/ssh-agent.1.gz /usr/share/man/man1/ssh-copy-id.1.gz /usr/share/man/man1/ssh-keyscan.1.gz /usr/share/man/man1/ssh.1.gz /usr/share/man/man5/ssh_config.5.gz /usr/share/man/man8/ssh-pkcs11-helper.8.gz

    3)查看并修改ssh服務端的配置文件

    man 5 sshd_config

    禁止realserver機器遠程登錄root賬號

    PermitRootLogin => yes or no,默認為yes 代表允許通過root賬號遠程登錄此服務器

    修改/etc/ssh/sshd_config第38行配置文件


    修改后重啟ssh服務,命令:systemctl restart sshd

    三、SSH服務任務解決方案

    1. 創建用戶并授權

    JumpServer跳板機創建用戶并授權

  • 第一步:創建用戶與用戶組(前端組,tom與jerry)

    創建前端組:groupadd html
    創建html組內用戶tom和jerry
    useradd -g html
    useradd -g html

  • 為用戶添加密碼
    命令:passwd [用戶名]

  • 為開發人員創建數據目錄并且設置相應的權限
    創建用戶數據目錄
    命令:mkdir -p /code/html

    更改目錄的文件所屬組(更改為html,代表html組內成員可以對這個目錄進行管理)

    修改文件所屬組命令:chgrp -R html /code/html
    給文件所屬組增加可寫權限:chgrp g+w /code/html


    添加粘滯位權限,防止誤刪除操作

    去除其它用戶的讀寫權限:chmod o=- /code/html
    添加粘滯位命令:chmod +t /code/html

  • 2. 測試用戶權限

    只有自己的文件才可以刪除和修改

    不是同組的用戶無法訪問

    3. 禁用root遠程連接登錄

    禁止realserver的root用戶遠程登錄
    修改配置文件命令:# vim /etc/ssh/sshd_config’
    PermitRootLogin 設置為no

    PermitRootLogin no

    4. 更改SSH默認端口

    更改realserver機器ssh默認端口號
    修改配置文件命令:vim /etc/ssh/sshd_config
    修改配置文件的第17行為 端口號為4567

    5. 重啟SSH服務

    systemctl restart sshd

    systemctl reload sshd

    restart與reload的本質區別:

  • restart其實相當于stop然后在start

  • reload不停止現有業務,只是重新加載sshd對應的配置文件

  • 6. 在RealServer創建一個hhy賬號測試ssh

    命令:useradd hhy
    隨意設置一個密碼

    測試從jumpserver遠程連接realserver的hhy賬號

    命令:ssh -p 4567 hhy@192.168.80.23
    -p:指定端口號

    前面修改了端口號為4567,所以要指定端口號。默認的22就不需要指定

    7. SSH客戶端不驗證指紋

    第一次連接遠程服務器時:

    如果我們不想驗證指紋
    修改配置文件:vim /etc/ssh/ssh_config

    第35行

    改為 StrictHostKeyChecking no

    8. 專業工具pwgen生成用戶密碼

    其用戶密碼一定不要手工設置,建議使用專業的密碼生成工具如pwgen。

    先配置EPEL源
    命令:wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    清楚yum緩存:yum clean all
    建新緩存:yum makecache

    安裝pwgen密碼生成工具
    命令:yum -y install pwgen -y

    使用pwgen密碼生成工具

    命令:pwgen -cnBs1 10 1

    pwgen用法

    # pwgen --help # 用法: pwgen 選項參數 長度 生成個數 Usage: pwgen [ OPTIONS ] [ pw_length ] [ num_pw ]# 密碼中至少包含一個大寫字母 -c or –capitalize# 密碼中不包含大寫字母 -A or –no-capitalize# 密碼中至少包含一個數字 -n or –numerals# 密碼中不包含數字 -0 or –no-numerals# 密碼中至少包含一個特殊符號 -y or –symbols# 生成完全隨機密碼 -s or –secure# 密碼中不包含歧義字符(例如1,l,O,0-B or –ambiguous# 使用SHA1 hash給定的文件作為一個隨機種子 -H or –sha1=path/to/file[#seed]# 在列中打印生成的密碼 -C# 不要在列中打印生成的密碼,即一行一個密碼 -1# 不要使用任何元音,以避免偶然的臟話 -v or –no-vowels

    9. 踢出用戶

    查看當前在線用戶


    踢出某個賬號
    命令:pkill -kill -t pts/1

    四、SSH免密登錄解決方案

    1. ssh連接

    jumpserver 連接=> ssh hhy@realserver的ip地址


    基于密鑰對的認證方式


    A主機 => JumpServer,B主機 => RealServer

    第一步:在A主機(JumpServer)生成一個密鑰對(公鑰和私鑰)

    第二步:把A主機的公鑰通過網絡拷貝到B主機(RealServer)上,然后把其內容追加到B主機的~/.ssh/authorized_keys

    第三步:由A主機(JumpServer)向B主機(RealServer)發起登錄請求,然后直接在B主機上進行公鑰比對(判斷A主機的公鑰是否已經存儲在B主機的authorized_keys文件中),如果存在且正確,則生成一個隨機的字符串(如itcast),然后使用A主機的公鑰對其加密得到加密的后字符串(如dXdh,34njasz!z.)

    第四步:通過網絡,由B主機講剛才生成的加密后的字符串傳輸給主機A,主機A接收到加密后的字符串以后,使用自己本地存儲的私鑰進行解密操作(得到hhy)

    第五步:把解密得到的itcast發送到B主機,然后驗證與剛才生成的字符串是否一致,如果一致,返回登錄成功。反之,則返回登錄失敗。

    到此免密登錄全部完成!

    2. SSH免密登錄的具體實現

    SSH免密的實現思路一共分為三個步驟(三步走)

    第一步:在A主機針對某個賬號(tom或jerry)生成公鑰與私鑰

    第二步:使用某些方法把公鑰發送到B主機中,然后追加到authorized_keys文件中

    第三步:測試是否實現免密登錄

    1. 方法1(常用)

  • 在 jumpserver的tom用戶生成公鑰和私鑰

    命令:ssh-keygen
    一路回車就好

    查看公鑰和私鑰
    在~/.ssh/下

  • 使用ssh-copy-id把公鑰文件中的內容傳輸到服務器端的~/.ssh/authorized_keys文件中

  • 命令:ssh-copy-id hhy@192.168.80.23

  • 在JumpServer客戶端測試免密登錄是否成功
  • 2. 方法2(集群常用)

    這里使用另一個用戶jerry

  • 生成公鑰和私鑰
    命令:ssh-keygen
  • 如果不想一路確認,可以在ssh-keygen -P “”,直接生成公私鑰


    2. 把id_rsa.pub文件,scp到RealServer服務器端

    3. 在RealServer服務器端,把id_rsa.pub文件中的內容追加到~/.ssh/authorized_keys文件中

    命令:cat id_rsa.pub >> ~/.ssh/authorized_keys

    **注意:**以上配置也比較簡單,但是實際應用時要注意文件的權限


    4. 測試免密是否成功

    命令:ssh hhy@192.168.80.23

    總結

    以上是生活随笔為你收集整理的万字详解SSH(SSH登录原理+SSH配置+模拟实现SSH免密登录)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。