SSHD


SSH基本概述

SSH服務協議說明

SSH 是 Secure Shell Protocol 的簡寫,由 IETF 網絡工作小組(Network Working Group )制定
在進行數據傳輸之前,SSH先對聯機數據包通過加密技術進行加密處理,加密后在進行數據傳輸。確保了傳遞的數據安全。
SSH是專為遠程登錄會話和其他網絡服務提供的安全性協議。利用 SSH 協議可以有效的防止遠程管理過程中的信息泄露問題,在當前的生產環境運維工作中,絕大多數企業普遍采用SSH協議服務來代替傳統的不安全的遠程聯機服務軟件,如telnet(23端口,非加密的)等。
在默認狀態下,SSH服務主要提供兩個服務功能:
一是提供類似telnet遠程聯機服務器的服務,即上面提到的SSH服務。
另一個是類似FTP服務的sftp-server,借助SSH協議來傳輸數據的.提供更安全的SFTP服務(vsftp,proftp)。

SSH遠程服務主要功能

提供遠程連接服務器的服務
對傳輸的數據進行加密

遠程連接方式有哪些

ssh屬於密文連接方式 監聽在本地22/tcp端口
telnet屬於明文連接方式 監聽在本地23/tcp端口

ssh知識要點

ssh是安全的加密協議,用於遠程鏈接linux服務器
ssh 默認端口是22,安全協議版本sshv2,出來2之外還有1(有漏洞)
ssh服務端主要包括兩個服務功能 ssh遠程鏈接和sftp服務
linux ssh 客戶端包括ssh 遠程鏈接命令,以及遠程拷貝scp命令

私鑰和公鑰

ssh實現安全鏈接建立,利用鑰匙和鎖頭
1. 鑰匙=私鑰 鎖頭=公鑰,私鑰可以解密公鑰
2. 公鑰可以再網絡中傳輸,私鑰再本地主機保存

SSH相關命令

SSH是典型的客戶端和服務端的交互模式, 客戶端廣泛的支持各個平台
WIndows有很多工具可以支持SSH連接功能, 建議使用Xshell

openssh軟件分析

(與數據加密相關的軟件--openssl)

[root@backup ~]# rpm -ql openssh-server
/etc/ssh/sshd_config    --- ssh服務配置文件
/usr/sbin/sshd          --- ssh服務進程啟動命令
[root@backup ~]# rpm -ql openssh-clients
/usr/bin/scp            --- 遠程拷貝命令
/usr/bin/sftp           --- 遠程文件傳輸命令
/usr/bin/slogin         --- 遠程登錄命令
/usr/bin/ssh            --- 遠程連接登錄命令
/usr/bin/ssh-copy-id    --- 遠程分發公鑰命令

ssh客戶端包含ssh以及像scp(遠程拷貝)、slogin(遠程登陸)、sftp(安全FTP文件傳輸)等應用程序。

ssh遠程登錄服務器命令

ssh -p22 nfsnobody@10.0.0.150 [命令]
# SSH連接遠程主機命令的基本語法;
# ssh 命令
# -p(小寫), 用於指定遠程主機端口,默認22端口可省略
# nfsnobody@remotehost
# "@"前面為用戶名,如果用當前用戶連接,可以不指定用戶
# "@"后面為要連接的服務器的IP

scp命令詳解

scp復制數據至遠程主機命令(全量復制)

SSH連接遠程主機命令的基本語法;
 scp 命令
 -P(大寫) 指定端口,默認22端口可不寫
 -r 表示遞歸拷貝目錄
 -p 表示在拷貝文件前后保持文件或目錄屬性不變
 -l 限制傳輸使用帶寬(默認kb)

推:PUSH,上傳

# scp -P22 -rp /tmp/nfsnobody nfsnobody@10.0.0.150:/tmp
# /tmp/nfsnobody為本地的目錄。
# “@”前為用戶名
# “@”后為要連接的服務器的IP。
# IP后的:/tmp目錄,為遠端的目標目錄。
# 說明: 以上命令作用是把本地/tmp/nfsnobody推送至遠端服務器10.0.0.150的/tmp目錄

拉:PULL,下載

# scp -P22 -rp root@10.0.0.7:/tmp/nfsnobody /opt/
# 還可以將遠端目錄或文件拉取至本地

SCP命令結論

scp通過加密進行遠程拷貝文件或目錄的命令。
scp拷貝權限為連接的用戶對應的權限。
scp支持數據的推送和拉取,但每次都是全量拷貝,效率低下。

Sftp命令詳解

Sftp遠程數據傳輸命令
sftp連接遠程
sftp root@192.168.56.12
sftp -oPort=52113 root@10.0.0.41 <-sftp的特殊端口連接
下載文件, 至於本地服務器
sftp> get conf.txt /tmp/
上傳本地服務器文件, 至遠程服務器
sftp> put /root/t1.txt /root/
sftp-->XFTP
    1.支持批量上傳文件
    2.支持單個文件超過4G
    3.支持斷點續傳

SSH服務軟件詳細說明

什么是ssh服務

SSH服務端是一個守護講程 (daemon).他在后台運行並響應來自客戶端的連接請求。 SSH服務端的講程名為sshd,負責實時監聽遠程SSH客戶端的遠程連接請求,並進行處理,一般包括公共密鑰認證、密鑰交換、對稱密鑰加密和非安全連接等。這個SSH服務就是我們前面基礎系統優化中保留開機自啟動的服務之。
ssh客戶端包含ssh以及像scp(遠程拷貝) slogin(遠程登陸) sftp(安全FTP文件傳輸)等應用程序。
ssh的工作機制大致是本地的ssh客戶端先發送一個連接請求到遠程的ssh服務端,服務端檢查連接的客戶端發送的數據包和IP地址,如果確認合法,就會發送密鑰給 SSH的客戶端,此時,客戶端本地再將密鑰發回給服務端,自此連接建立。

ssh軟件安裝

客戶端

[root@nfs01 ~]# rpm -qf `which ssh`
openssh-clients-5.3p1-122.el6.x86_64

服務端軟件

[root@nfs01 ~]# rpm -qf `which sshd`
openssh-server-5.3p1-122.el6.x86_64
注意:使用sshd采用絕對路徑進行啟動
[root@test ~]# sshd
sshd re-exec requires execution with an absolute path

SSH連接方式

基於賬戶密碼遠程登錄

基於口令的安全驗證的方式就是大家現在一直在用的,只要知道服務器的SSH連接帳號和口令(當然也要知道對應服務器的 IP及開放的 SSH端口,默認為22 ),就可以通過 ssh客戶端登錄到這台遠程主機。此時,聯機過程中所有傳輸的數據都是加密的。
知道服務器的IP端口,賬號密碼, 即可通過ssh客戶端登陸遠程主機, 遠程主機聯機過程中傳輸數據庫都是加密的。

~ ssh -p22 root@10.0.0.60
root@10.0.0.60's password:
[root@m01 ~]#

ssh分發公鑰實質執行過程

①. 管理服務器創建私鑰和公鑰(密鑰對
②. 將公鑰文件遠程傳送復制到被管理服務器相應用戶~/.ssh/id_dsa.pub下,並修改.ssh目錄權限為700
③. 修改公鑰文件文件名稱為authorized_keys,授權權限為600
④. 利用ssh服務配置文件的配置參數,進行識別公鑰文件authorized_keys
⑤. 進而實現基於密鑰遠程登錄服務器(免密碼登錄/非交互方式登錄)

基於秘鑰遠程登錄

默認情況下,通過ssh客戶端登陸遠程服務器, 需要提供遠程系統上的帳號與密碼,但為了降低密碼泄露的機率和提高登陸的方便性, 建議使用密鑰驗證方式.

1.在管理服務器上生成密鑰,-t密鑰類型, -C指定用戶郵箱
[root@m01 ~]# ssh-keygen -t rsa -C nfsnobody@qq.com
...
默認一路回車即可, 當然也可以根據不同需求進行修改
...
2.將A服務器上的公鑰推送至B服務器
命令示例: ssh-copy-id [-i [identity_file]] [user@]machine
ssh-copy-id 命令
-i          指定下發公鑰的路徑
[user@]     以什么用戶身份進行公鑰分發(root),如果不輸入,表示以當前系統用戶身份分發公鑰
machine     下發公鑰至那台服務器, 填寫遠程主機IP地址
秘鑰分發, [會將A服務器的公鑰寫入B服務器~/.ssh/authorized_keys文件中]
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41
3.A服務器通過密鑰方式連接B服務器
遠程登錄對端主機方式
[root@m01 ~]# ssh root@172.16.1.41
[root@nfs ~]#

不登陸遠程主機執行命令
[root@m01 ~]# ssh root@172.16.1.41 "hostname -i"
172.16.1.41

可能遇到錯誤
1.no route to host  防火牆
2.Connection refused  防火牆或服務未啟用

telnet連接

telnet連接 不加密  無法使用root用戶連接

安裝telnet服務,然后使用root登錄測試
[root@web01 ~]# yum install telnet-server -y
[root@web01 ~]# systemctl start telnet.socket
使用xshell的新建標簽,輸入如下指令[登錄不上]
[e:\~]$ telnet 10.0.0.7
Kernel 3.10.0-862.el7.x86_64 on an x86_64
web01 login: root
Password: 
Login incorrect
創建一個普通用戶,再次使用telnet登錄測試
[root@web01 ~]# useradd od
[root@web01 ~]# echo "1" | passwd --stdin od

[e:\~]$ telnet 10.0.0.7
web01 login: od
Password: 
Last login: Mon Sep 10 09:57:39 from ::ffff:10.0.0.1
[od@web01 ~]$

SSH服務密鑰分發實戰

角色 外網IP 內網IP 用戶
m01分發密鑰 eth0:10.0.0.61 eth1:172.16.1.61 root
nfs被控端 eth0:10.0.0.31 eth1:172.16.1.31 root
backup被控端 eth0:10.0.0.41 eth1:172.16.1.41 root
1.實現m01服務器通過密鑰登錄backup和nfs服務器
2.實現m01服務器查看backup和nfs的服務器的狀態信息(無需密碼)
在m01控制端生成密鑰
[root@m01 ~]# ssh-keygen -t rsa -C A-Server.com
分發密鑰,如果SSH不是使用默認22端口, 使用-P指定對應端口
[root@m01 ~]# ssh-copy-id  -i /root/.ssh/id_rsa.pub "-p6666 root@172.16.1.31"
[root@m01 ~]# ssh-copy-id  -i /root/.ssh/id_rsa.pub "-p6666 root@172.16.1.41"
在m01管理機上測試是否成功登陸兩台服務器
[root@m01 ~]# ssh -p6666 root@1172.16.1.41
[root@nfs01 ~]#

[root@m01 ~]# ssh -p6666 root@1172.16.1.31
[root@backup ~]# 

SSH練習案例

1.使用root用戶完成一把鑰匙開多把鎖A鑰匙,BC鎖
創建公鑰和私鑰(A)
[root@manager ~]# ssh-keygen 
分發A公鑰至(BC)
[root@manager ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.31
[root@manager ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41
2.在不破壞題1的前提下,完成多把鑰匙開一把鎖BC鑰匙,A鎖
1.生成公鑰和私鑰(B)
[root@nfs01 ~]# ssh-keygen 
2.B下發公鑰給A
[root@nfs01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub  root@172.16.1.61

3.生成公鑰和私鑰(C)
[root@nfs01 ~]# ssh-keygen 
4.C下發公鑰給A
[root@backup ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.61
3.如何實現從A指定目錄或文件分發到BC服務器
[root@manager ~]# scp manager-web root@172.16.1.31:/tmp
manager-web                 100%    0     0.0KB/s   00:00    
[root@manager ~]# scp manager-web root@172.16.1.41:/tmp
manager-web                 100%    0     0.0KB/s   00:00  
4.如何快速查看所有機器的load,CPU,Memory等信息(思考:如果服務器數量多,如何並發查看和分發數據)
[root@manager ~]# cat test.sh 
#!/usr/bin/bash
[ $# -ne 1 ] && echo "請輸入執行的命令" && exit 1

for i in 31 41
do
    echo "#########172.16.1.$i#####"
    ssh root@172.16.1.$i "$1"
done

SSH訪問控制

遠程服務訪問控制手段

1.更改SSH服務遠程登錄端口
2.更改SSH服務監聽本地內網IP
3.更改SSH服務禁止ROOT管理員登錄
4.更改SSH服務密碼登錄認證為密鑰登錄
5.重要服務器都不使用公網IP地址
6.使用防火牆限制來源IP地址

SSH入侵網友案例

1.SSH服務登錄防護手段配置文件/etc/ssh/sshd_config
Port 6666                   # 變更SSH服務遠程連接端口
ListenAddress 10.0.0.61     # 綁定本地內網地址
PermitRootLogin             # 是否允許root用戶遠程登錄
PasswordAuthentication      # 是否允許使用密碼登錄
UseDNS                      # 是否進行dns反向解析,影響ssh連接效率參數
GSSAPIAuthentication        # 是否進行認證,影響ssh連接效率參數

SSH配置實例, 添加如下配置至/etc/ssh/sshd_config, 根據業務需求調整配置
###SSH###
Port 6666
ListenAddress 10.0.0.61
#PasswordAuthentication no
#PermitRootLogin no
GSSAPIAuthentication no
UseDNS no

###END###

ssh服務配置文件

配置文件中所有注釋信息,表示默認參數配置
配置文件中#空格 后面內容表示說明信息
              #參數 表示配置參數信息
配置文件參數信息修改后,一旦變為注釋,即還原為默認配置

ssh服務的配置文件路徑

vim  /etc/ssh/sshd_config
修改SSH服務的運行參數,是通過修改配置文件/etc/ssh/sshd_config實現的。
一般來說SSH服務使用默認的配置已經能夠很好的工作了,如果對安全要求不高,僅僅提供SSH服務的情況,可以不需要修改任何配置。

配置文件中常用配置說明

[root@backup ~]# vim /etc/ssh/sshd_config
#       $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $
 
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
 
# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin
 
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options change a
# default value.
 
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options change a
# default value.
 
Port 25113                   #端口
ListenAddress 10.0.0.41      #監聽地址(本地網卡地址),指定本地網卡那個網卡提供服務
PermitRootLogin no           #是否允許root用戶登陸
#PermitEmptyPasswords no     #禁止空密碼登陸
#UseDNS no                   #不使用DNS
GSSAPIAuthentication no      #API認證
連接慢的解決
#AddressFamily any         #指定監聽ipv4地址,或是ipv6地址,或者所有都監聽

配置文件內容說明:
井號(#)注釋的參數信息為默認配置
井號(#)后面有空格的為描述信息
井號(#)后面沒有空格的為參數信息
另外:配置文件參數信息修改后,一旦變為注釋,即還原為默認配置

配置文件語法檢查方法

使用sshd -t 命令 對配置文件的語法進行檢查

正確↓
[root@backup ~]# sshd -t /etc/ssh/sshd
Extra argument /etc/ssh/sshd.
語法格式有錯誤↓
[root@test ~]# sshd -t /etc/ssh/sshd_config
/etc/ssh/sshd_config: line 50: Bad configuration option: uthorizedKeysFile
/etc/ssh/sshd_config: terminating, 1 bad configuration options

SSH配置文件相關參數

命令參數 參數說明
Port 指定sshd進程監聽的端口號,默認為22.可以使用多條指令監聽多個端口.
默認將在本機的所有網絡接□上監聽,但是可以通過ListenAddress指走只在某個特定的接口上監聽.
PermitEmptyPasswords 是否允許密碼為空的用戶遠程登錄.默認為"no"
PermitRootLogin 是否允許root登錄.可用值如下:"yes"(默認)表示允許."no"表示禁止.
"without-password"表示禁止使用密碼認證登錄."forced-commands-only"表示只有在指走了command選項的情況下才允許使用公鑰認證登錄.同時其它認證方法全部被禁止.這個值常用於做遠程備份之類的事情.
1.多開一個窗口
2.臨時多部署一條連接方式
3.給普通用戶sudo權限
UseDNS 指定定sshd是否應該對遠程主機名進行反向解折,以檢查此主機名是否與其IP地址真實對應.默認值為"yes”.
ListenAddress 指定監聽並提供服務相應的網卡地址信息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM