ssh服務介紹及配置

1、ssh介紹

一、什麼是 ssh

ssh 是 Secure Shell 的縮寫,是一個創建在應用層上的安全遠程管理協議。ssh 是目前較爲可靠的傳輸協議,專爲遠程登陸會話和其餘網絡服務提供安全性。利用 ssh 協議能夠有效防止遠程管理過程當中的信息泄露問題。 ssh可用於大多數UNIX和類UNIX操做系統中,可以實現字符界面的遠程登陸管理,它默認使用22端口,採用密文的形式在網絡中傳輸數據,相對於經過明文傳輸的Telnet協議,具備更高的安全性。linux

二、ssh的登陸驗證

ssh 提供了基於帳戶密碼(口令)和密鑰對兩種登陸驗證方式,這二者都是經過密文傳輸數據的。shell

帳戶密碼驗證:

登陸格式
ssh 用戶名@IP地址
密鑰對驗證:
  • 首先須要在 Client 上建立一對密鑰,而且須要把公鑰放在須要訪問的 Server 上。
  • 當 Client 須要鏈接 Server 時,Client 端的軟件就會向 Server 端發出登陸請求,請求使用密鑰對中的的公鑰進行安全驗證
  • Server 收到請求以後,會在該用戶的家目錄下查詢公鑰文件,拿 Client 發送過來的公鑰和本身家目錄下的公鑰 進行比較
  • 若是兩個公鑰一致,Server 就用公鑰加密「challenge(質疑)」,並把它發送給 Client 軟件。Client 收到加 密內容以後,使用本地的私鑰進行解密,再把解密結果發送給 Server 端,Server 端驗證成功後,容許登陸。

2、ssh服務

一、環境準備

準備好兩臺Linux操做系統的主機,且將其主機名更改成不一樣,便於後面的密鑰對登陸。
centos6 更改主機名vim

[root@centos ~]# vim /etc/sysconfig/network
HOSTNAME=centos-11

臨時關閉防禦功能:windows

iptables -F #清空防火牆規則 
 setenforce 0 #臨時關閉SELinux

永久關閉防禦功能:centos

chkconfig iptables off         #設置防火牆開機不自啓動 
 sed -i ‘7s/enforcing/disabled/’ /etc/selinux/config  #永久關閉SELinux 
 #注意:以上兩條命令執行後,須要重啓服務器才能生效
二、密鑰對登陸配置
一、linux主機間進行密鑰對登陸

一、客戶端生成密鑰對文件 ssh-keygen -t rsa -b 2048
-t 指定加密類型(rsa/dsa等)
-b 指定密鑰對加密長度
詢問1:執行過程當中會詢問保存位置,通常默認保存在當前用戶家目錄下的.ssh/目錄下
詢問2:是否對密鑰文件進行加密
加密:若加密,則在調用密鑰文件時須要先驗證密鑰的密碼,密碼正確才能使用密鑰文件
不加密:若不加密,則密鑰文件能夠直接被調用,整個登陸驗證過程無需輸入任何密碼,即爲免密登陸安全

[root@centos-11 ~]# ssh-keygen -t rsa -b 2048

二、將公鑰文件上傳至服務器端 ssh-copy-id 用戶名@服務器IP地址服務器

[root@centos-11 ~]# ssh-copy-id root@10.10.10.12
#該用戶名和要用來登陸服務器的用戶名一致

三、客戶端嘗試登陸服務器 ssh 用戶名@服務器IP地址網絡

[root@centos-11 ~]# ssh root@10.10.10.12
Last login: Fri Dec 20 20:41:00 2019 from 10.10.10.1
#密鑰對驗證優先級大於帳戶密碼驗證
二、windows 密鑰對登陸 linux主機

因爲Windows不能直接生成密鑰對,因此須要藉助工具。我使用的是xshell
一、使用Xshell自帶的密鑰對生成嚮導生成密鑰對

一直下一步,其中有一步是,設置密碼爲本地私鑰。看狀況進行選擇。最後一步複製公鑰無需保存。
app

二、將公鑰導入Linux主機的指定用戶下的指定公鑰配置文件內 後面用哪一個用戶登陸就放在誰的用戶家目錄下,找到 .ssh 目錄,而後在裏面建立 authorized_keys 文件,而且將公鑰寫入。ssh

[root@centos-12 ~]# vim .ssh/authorized_keys
#粘貼你剛纔複製的公鑰信息,另起一行

三、使用windows嘗試登陸指定用戶

三、禁止root用戶遠程登陸

root 在系統中是一個能夠隨心所欲的角色,咱們能夠在平時的操做中用普通用戶操做,在有須要修改一些系統設置的時候再從普通用戶切換到 root 用戶,這樣能夠最大限度的避免由於誤操做而對系統形成破壞,同時也能夠避免黑客在暴力破解後直接使用 root 用戶登陸系統,通常在遠程登陸管理上咱們會禁止直接使用 root 用戶登陸。

配置文件:/etc/ssh/sshd_config 
選項:  
PermitRootLogin no
四、修改默認端口
修改默認端口:ssh 做爲一個用來遠程管理服務器的工具,須要特別的安全,默認狀況下使用TCP的22端口,若不進行修改,很容易被利用遭到攻擊,因此咱們通常都會修改端口,儘可能修改一個高位端口(範圍1-65535)
配置文件:/etc/ssh/sshd_config 
 Port 55235
linux 主機登陸
    ssh -p 55235 root@10.10.10.12
xshell 登陸
    ssh root@10.10.10.12:55235
五、ssh服務相關服務
scp:安全的遠程文件複製命令

scp是secure copy的簡寫,用於在Linux下進行遠程拷貝文件的命令,相似於命令有cp,scp傳輸是加密的,因此可能會稍微影響一點速度。另外,scp還很是不佔資源,不會提升多少系統負荷。

格式:
scp 本地文件 用戶名@服務器IP:目錄 
scp test.txt root@10.10.10.12:/tmp    
 -P 端口   #若端口不是默認22,則須要使用此格式指定端口
sftp:安全的文件傳輸協議

sftp是Secure FileTransferProtocol的縮寫,安全文件傳送協議。sftp與ftp有着幾乎同樣的語法和功能。因爲這種傳輸方式使用了加密/解密技術,因此sftp比ftp更安全一些,但傳輸效率比普通的FTP要低得多.

格式:
sftp 用戶名@服務器IP  
-oPort=端口  #若端口不是默認22,則須要使用此格式指定端口 
交互命令: 
help:查看在交互模式下支持哪些命令 
pwd/lpwd:pwd是查看服務器所在路徑;lpwd是查看客戶端所在路徑 
ls/lls:ls是查看服務器當前目錄下的文件列表;lls是查看客戶機當前所在路徑的全部文件列表 
put:將客戶機中的指定文件上傳到服務器端 
get:將服務器端的指定文件下載到客戶機的當前所在目錄 
rm:刪除掉服務器端的指定文件 
quit:退出sftp的交互模式,斷開和服務器之間的鏈接
6 TCP Wrappers(簡單防火牆)
一、介紹

TCP_Wrappers是一個工做在第四層(傳輸層)的的安全工具,對有狀態鏈接(TCP)的特定服務進行安全檢測並實現訪問控制,界定方式是凡是調用libwrap.so庫文件的的程序就能夠受TCP_Wrappers的安全控制。它的主要功能就是控制誰能夠訪問,常見的程序有rpcbind、vsftpd、sshd,telnet。
簡單來講 TCP Wrappers 只對走tcp協議的一些服務起到控制做用。
判斷方式:

1. 查看對應服務命令所在位置 which sshd 
2. 查看指定命令執行時是否調用libwrap.so文件 ldd /usr/sbin/sshd | grep libwrap.so
[root@centos-12 ~]# which sshd
/usr/sbin/sshd
[root@centos-12 ~]# ldd /usr/sbin/sshd | grep libwrap.so
    libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fd38c0d1000)
二、工做原理

以ssh爲例,每當有ssh的鏈接請求時,先讀取系統管理員所設置的訪問控制文件,符合要求,則會把此次鏈接原封不動的轉給ssh進程,由ssh完成後續工做;若是此次鏈接發起的ip不符合訪問控制文件中的設置,則會中斷鏈接請求,拒絕提供ssh服務。

三、配置

TCP_Wrappers的使用主要是依靠兩個配置文件/etc/hosts.allow, /etc/hosts.deny,以此實現訪問控制,默認狀況下,/etc/hosts.allow,/etc/hosts.deny什麼都沒有添加,此時沒有限制 。

service_list@host: client_list 
配置文件編寫規則: 
    service_list: 是程序(服務)的列表,能夠是多個,多個時,使用,隔開
    @host:設置容許或禁止他人從本身的哪一個網口進入。這一項不寫,就表明所有 
    client_list:是訪問者的地址,若是須要控制的用戶較多,可使用空格或,隔開
    內置ACL:ALL(全部主機)、LOCAL(本地主機)

以ssh服務代碼示例:

拒絕單個 IP 使用 ssh 遠程鏈接: 
配置文件: 
    hosts.allow:空着 
    hosts.deny:sshd:10.10.10.1
拒絕某一網段使用 ssh 遠程鏈接: 
    hosts.allow:空着 
    hosts.deny:sshd:10.10.10. 
僅容許某一 IP 使用 ssh 遠程鏈接: 
    hosts.allow:sshd:10.10.10.11
    hosts.deny:sshd:ALL
相關文章
相關標籤/搜索