第1章 SSH基本概述 1.1 SSH服務協議說明 SSH 是 Secure Shell Protocol 的簡寫,由 IETF 網路工作小組(Network Working Group )制定 在進行數據傳輸之前,SSH先對聯機數據包通過加密技術進行加密處理,加密後在進行數據傳輸。確保了傳遞的數據 ...
第1章 SSH基本概述
1.1 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)。
1.2 SSH
遠程服務主要功能
提供遠程連接伺服器的服務
對傳輸的數據進行加密
1.3 遠程連接方式有哪些
ssh屬於密文連接方式
監聽在本地22/tcp埠
telnet屬於明文連接方式 監聽在本地23/tcp埠
1.4 ssh知識要點
ssh是安全的加密協議,用於遠程鏈接linux伺服器
ssh 預設埠是22,安全協議版本sshv2,出來2之外還有1(有漏洞)
ssh服務端主要包括兩個服務功能 ssh遠程鏈接和sftp服務
linux ssh 客戶端包括ssh 遠程鏈接命令,以及遠程拷貝scp命令等
1.5 私鑰和公鑰
ssh實現安全鏈接建立,利用鑰匙和鎖頭
1. 鑰匙=私鑰 鎖頭=公鑰,私鑰可以解密公鑰
2. 公鑰可以再網路中傳輸,私鑰再本地主機保存
第2章 SSH相關命令
SSH是典型的客戶端和服務端的交互模式, 客戶端廣泛的支持各個平臺
WIndows有很多工具可以支持SSH連接功能, 建議使用Xshell
2.1 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文件傳輸)等應用程式。
2.2 ssh遠程登錄伺服器命令
ssh -p22 [email protected] [命令] # SSH連接遠程主機命令的基本語法; # ssh 命令 # -p(小寫), 用於指定遠程主機埠,預設22埠可省略 # oldboy@remotehost # "@"前面為用戶名,如果用當前用戶連接,可以不指定用戶 # "@"後面為要連接的伺服器的IP
2.3 scp命令詳解
scp複製數據至遠程主機命令(全量複製) SSH連接遠程主機命令的基本語法; scp 命令 -P(大寫) 指定埠,預設22埠可不寫 -r 表示遞歸拷貝目錄 -p 表示在拷貝文件前後保持文件或目錄屬性不變 -l 限制傳輸使用帶寬(預設kb)
2.3.1 推:PUSH,上傳
# scp -P22 -rp /tmp/oldboy [email protected]:/tmp # /tmp/oldboy為本地的目錄。 # “@”前為用戶名 # “@”後為要連接的伺服器的IP。 # IP後的:/tmp目錄,為遠端的目標目錄。 # 說明: 以上命令作用是把本地/tmp/oldboy推送至遠端伺服器10.0.0.150的/tmp目錄
2.3.2 拉:PULL,下載
# scp -P22 -rp [email protected]:/tmp/oldboy /opt/ # 還可以將遠端目錄或文件拉取至本地
2.3.3 SCP命令結論
scp通過加密進行遠程拷貝文件或目錄的命令。
scp拷貝許可權為連接的用戶對應的許可權。
scp支持數據的推送和拉取,但每次都是全量拷貝,效率低下。
2.4 Sftp命令詳解
Sftp遠程數據傳輸命令 sftp連接遠程 sftp root@192.168.56.12 sftp -oPort=52113 [email protected] <-sftp的特殊埠連接 下載文件, 至於本地伺服器 sftp> get conf.txt /tmp/ 上傳本地伺服器文件, 至遠程伺服器 sftp> put /root/t1.txt /root/ sftp-->XFTP 1.支持批量上傳文件 2.支持單個文件超過4G 3.支持斷點續傳
2.5 SSH服務軟體詳細說明
2.5.1 什麼是ssh服務
SSH服務端是一個守護講程 (daemon).他在後臺運行並響應來自客戶端的連接請求。 SSH服務端的講程名為sshd,負責實時監聽遠程SSH客戶端的遠程連接請求,併進行處理,一般包括公共密鑰認證、密鑰交換、對稱密鑰加密和非安全連接等。這個SSH服務就是我們前面基礎系統優化中保留開機自啟動的服務之。
ssh客戶端包含ssh以及像scp(遠程拷貝) slogin(遠程登陸) sftp(安全FTP文件傳輸)等應用程式。
ssh的工作機制大致是本地的ssh客戶端先發送一個連接請求到遠程的ssh服務端,服務端檢查連接的客戶端發送的數據包和IP地址,如果確認合法,就會發送密鑰給 SSH的客戶端,此時,客戶端本地再將密鑰發回給服務端,自此連接建立。
2.5.2 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
第3章 SSH連接方式
3.1 基於賬戶密碼遠程登錄
基於口令的安全驗證的方式就是大家現在一直在用的,只要知道伺服器的SSH連接帳號和口令(當然也要知道對應伺服器的 IP及開放的 SSH埠,預設為22 ),就可以通過 ssh客戶端登錄到這台遠程主機。此時,聯機過程中所有傳輸的數據都是加密的。
知道伺服器的IP埠,賬號密碼, 即可通過ssh客戶端登陸遠程主機, 遠程主機聯機過程中傳輸資料庫都是加密的。
~ ssh -p22 [email protected] root@10.0.0.60's password: [root@m01 ~]#
3.2 基於秘鑰遠程登錄
預設情況下,通過ssh客戶端登陸遠程伺服器, 需要提供遠程系統上的帳號與密碼,但為了降低密碼泄露的機率和提高登陸的方便性, 建議使用密鑰驗證方式.
1.在管理伺服器上生成密鑰,-t密鑰類型, -C指定用戶郵箱
[root@m01 ~]# ssh-keygen -t rsa -C [email protected] ... 預設一路回車即可, 當然也可以根據不同需求進行修改 ...
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 [email protected]
3.A伺服器通過密鑰方式連接B伺服器
遠程登錄對端主機方式
[root@m01 ~]# ssh [email protected] [root@nfs ~]#
不登陸遠程主機執行命令
[root@m01 ~]# ssh [email protected] "hostname -i" 172.16.1.41
可能遇到錯誤
1.no route to host 防火牆
2.Connection refused 防火牆或服務未啟用
3.3 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 ~]$
第4章 ssh服務配置文件
配置文件中所有註釋信息,表示預設參數配置
配置文件中#空格 後面內容表示說明信息
#參數 表示配置參數信息
配置文件參數信息修改後,一旦變為註釋,即還原為預設配置
4.1 ssh服務的配置文件路徑
vim /etc/ssh/sshd_config
修改SSH服務的運行參數,是通過修改配置文件/etc/ssh/sshd_config實現的。
一般來說SSH服務使用預設的配置已經能夠很好的工作了,如果對安全要求不高,僅僅提供SSH服務的情況,可以不需要修改任何配置。
4.2 配置文件中常用配置說明
[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地址,或者所有都監聽
配置文件內容說明:
井號(#)註釋的參數信息為預設配置
井號(#)後面有空格的為描述信息
井號(#)後面沒有空格的為參數信息
另外:配置文件參數信息修改後,一旦變為註釋,即還原為預設配置
4.3 配置文件語法檢查方法
使用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
4.4 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 |
指定監聽並提供服務相應的網卡地址信息 |