文章目錄
這裏是一段防爬蟲文本,請讀者忽略。
本文原創首發於CSDN,作者IDYS
博客首頁:https://blog.csdn.net/weixin_41633902/
本文鏈接:https://blog.csdn.net/weixin_41633902/article/details/105821625
- 寫在開頭的話
- 請記住:實踐是掌握知識的最快方法
- 如果你只是懷着看看的態度去快速瀏覽文章,而不去認認真真的把文章裏面講的任何一個知識點去實踐一遍,那麼你永遠也掌握不了它
- 生命不息,折騰不止!
ssh的基本概念
- ssh是secure shell的縮寫,是一個建立在應用層上的遠程安全管理協議
- ssh是目前較爲可靠的傳輸協議,專爲遠程登錄會話和其它網絡服務提供安全性。利用ssh協議可以有效防止遠程管理過程中的信息泄露問題
- ssh可用於大多數UNIX和類UNIX操作系統中,能夠實現字符界面的遠程登錄管理,它默認使用22端口,採用密文的形式在網絡中傳輸數據,相對於通過明文傳輸的Telnet協議,具有更高的安全性
telnet遠程終端協議傳輸的數據以明文方式傳輸,會被抓包軟件抓取到數據
ssh的登錄驗證模式
ssh 提供了基於賬戶密碼(口令)和密鑰對兩種登錄驗證方式,這兩者都是通過密文傳輸數據的
賬戶密碼驗證
格式
- ssh 用戶名@IP地址
- ssh [email protected]
windows遠程登錄Linux主機一般使用第三方工具,比如Xshell、secureCRT、putty
密鑰對驗證
-
首先需要在 Client 上創建一對密鑰,並且需要把公鑰放在需要訪問的 Server 上
-
當 Client 需要連接 Server 時,Client 端的軟件就會向 Server 端發出登錄請求,請求使用密鑰對中的的公鑰 進行安全驗證
-
Server 收到請求之後,會在該用戶的家目錄下查詢公鑰文件,拿 Client 發送過來的公鑰和自己家目錄下的公鑰 進行比較
-
如果兩個公鑰一致,Server 就用公鑰加密“challenge(質疑)”,並把它發送給 Client 軟件。Client 收到加 密內容之後,使用本地的私鑰進行解密,再把解密結果發送給 Server 端,Server 端驗證成功後,允許登錄
注意:若第3個步驟對比結果失敗,則 Server 端會通知 Client 端此公鑰未在本機註冊,無法驗證登錄
ssh(secure shell)的服務搭建
Linux服務器的建立(VMware克隆形式)
- 搭建三臺Linux服務器,本次實驗採用的是三臺機器均爲CentOS6.10,第一臺Linux服務器採用VMware搭建的方式,後兩臺採用VMware克隆的形式。VMware安裝Linux就不過多贅述了。這裏主要講一下克隆的方式
- 點擊[管理],然後點擊[克隆]
-
之後點擊[鏈接克隆](因爲這樣節省硬盤空間)
-
選擇[虛擬機設置]
- 選擇[高級]
- 點擊[生成]
-
打開克隆機
-
修改 /etc/udev/rules.d/70-persistent-net.rules文件
-
註釋掉第8行的這個內容
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:ec:96:c2", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
(你裏面的參數可能和我不一樣,但是開頭都是以subsystem開頭的),然後再將第11行的NAME="eth1"
改爲NAME="eth0"
,最後修改結果如下
1 # This file was automatically generated by the /lib/udev/write_net_rules
2 # program, run by the persistent-net-generator.rules rules file.
3 #
4 # You can modify it, as long as you keep each rule on a single
5 # line, and change only the value of the NAME= key.
6
7 # PCI device 0x8086:0x100f (e1000)
8 # SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:ec:96:c2", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
9
10 # PCI device 0x8086:0x100f (e1000)
11 SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:50:56:32:e0:eb", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
- 註釋圖如下
- 修改
/etc/sysconfig/network-scripts/ifcfg-eth0
的內容。將UUID註釋掉,將硬件地址HWADDR註釋掉,ONBOOT(開機啓動網卡選項)改爲yes,剩下如果你想把網絡改爲靜態方式的話。做這個修改BOOTPROTO=static
- 然後再配置ip地址,網關,子網掩碼,DNS
注意你修改的網絡必須和你VMware虛擬機設置的網絡在同一網段內,否則將無法連通互聯網。甚至都不能和你的物理機連通
- 我的配置如下
[root@IDYS_02 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
# UUID=f2b1fb29-c49e-419c-bea2-5b1887463266
# 啓動開機自啓動網絡
ONBOOT=yes
NM_CONTROLLED=yes
# 靜態方式
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
# HWADDR=00:0C:21:EC:36:C2
PEERDNS=yes
PEERROUTES=yes
#網段必須在虛擬機設置的網段內,網關也必須是和你虛擬機設置的網關相同
IPADDR=192.168.200.137
NETMASK=255.255.255.0
GATEWAY=192.168.200.2
DNS1=114.114.114.114
DNS2=8.8.8.8
- 之後再重啓,重啓完成後你可以看到你的網卡配置正常,這時你便可以連通互聯網了
# 重啓命令
shutdown -r now
# -r 代表reboot的意思
ssh(secure shell)服務的搭建
安全防護的關閉
- 爲了方便確認,我先修改主機名
-
三臺Linux的主機名分別爲,dayuanshuai,IDYS_01,IDYS_02
-
臨時修改主機名的方法:
- hostname 主機名
# 如:
hostname IDYS_01
- 永久修改主機名的方法:
- 編輯
/etc/sysconfig/network
文件,修改如下
- 編輯
NETWORKING=yes
HOSTNAME=IDYS_01 #此處將主機名修改爲你要想修改的主機名即可
- 關閉安全措施(因爲我採用的是實驗環境,所以才關閉安全措施)
- 首先查看防火牆狀態
[root@IDYS_01 ~]# service iptables status
iptables: Firewall is not running.
- 然後查看SELinux的狀態
# 可以看大SELinux處於開啓狀態
[root@IDYS_01 ~]# getenforce
Enforcing
- 臨時關閉防火牆和SELinux的方法
# 關閉防火牆服務
[root@IDYS_01 ~]# service iptables stop
# 關閉SELinux
[root@IDYS_01 ~]# setenforce 0
- 永久關閉防火牆的方法
# 永久關閉防火牆
[root@IDYS_01 ~]# chkconfig iptables off
# 查看防火牆處於各個模式的開啓狀態
[root@IDYS_01 ~]# chkconfig --list iptables
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
- 永久關閉SElinux的方法
- 編輯
/etc/selinux/config
文件,將第七行的SELINUX=enforcing
改爲SELINUX=disabled
- 可以直接通過vim修改。也可以通過如下方式修改
- 編輯
sed -i '7s/enforcing/disabled/' /etc/selinux/config
永久修改的方式,重啓即是生效
- 擴展知識:
- iptables -L 查看防火牆規則
Linux上用戶名密碼登錄ssh服務器端
查看是否安裝openssh安裝包
- 一般來說Linux安裝時,openssh服務器端程序即會自動安裝,但是不會安裝openssh客戶端程序
# 查看安裝的openssh安裝包,可以看到沒有安裝ssh客戶端,只有服務器端
[root@IDYS_01 selinux]# rpm -qa | grep openssh
openssh-5.3p1-123.el6_9.x86_64
openssh-server-5.3p1-123.el6_9.x86_64
- 查看可以安裝的openssh安裝包
[root@IDYS_02 ~]# yum list | grep openssh
openssh.x86_64 5.3p1-124.el6_10 @updates
openssh-server.x86_64 5.3p1-124.el6_10 @updates
openssh-askpass.x86_64 5.3p1-124.el6_10 updates
openssh-clients.x86_64 5.3p1-124.el6_10 updates
openssh-ldap.x86_64 5.3p1-124.el6_10 updates
- 安裝ssh客戶端
[root@IDYS_02 ~]# yum -y install openssh-clients
- 查看是否安裝成功
# 此時可以看到ssh客戶端安裝成功
[root@IDYS_02 ~]# rpm -qa | grep openssh
openssh-server-5.3p1-124.el6_10.x86_64
openssh-5.3p1-124.el6_10.x86_64
openssh-clients-5.3p1-124.el6_10.x86_64
- 擴展知識:卸載命令
- rpm -e 全名安裝包
- yum -remove 安裝包名稱
Linux上用戶名密碼登錄ssh服務器端
- 格式:
- ssh 用戶名@IP地址
- 連接過程中,服務器端會要求客戶端接收服務器端的公鑰,以便傳輸服務器端的密碼時採用服務器端的公鑰加密,這樣就保證了安全性
[root@dayuanshuai ~]# ssh [email protected]
The authenticity of host '192.168.200.136 (192.168.200.136)' can't be established.
# 接收服務器端的公鑰
RSA key fingerprint is 21:09:71:ce:3c:a0:19:8e:84:f9:c9:03:8f:f2:74:b9.
# 詢問是否確定想要連接? 輸入 yes即可
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.200.136' (RSA) to the list of known hosts.
[email protected]'s password:
Last login: Tue Apr 28 23:00:52 2020 from 192.168.200.1
# 登錄成功
Linux 主機之間的密鑰對登錄驗證
- 客戶端生成密鑰對文件
- ssh-keygen -t [ rsa | dsa ] -b 密鑰對長度
- -t 指定加密類型(rsa/dsa等)
- -b 指定密鑰對加密長度
- 詢問1:執行過程中會詢問保存位置,一般默認保存在當前用戶家目錄下的.ssh/目錄下
- 詢問2:是否對密鑰文件進行加密
- 加密:若加密,則在調用密鑰文件時需要先驗證密鑰的密碼,密碼正確才能使用密鑰文件
- 不加密:若不加密,則密鑰文件可以直接被調用,整個登錄驗證過程無需輸入任何密碼,即爲免密登錄
- 這裏執行的命令爲
ssh-keygen -t rsa -b 2048
- 說明:因爲rsa加密算法1024長度的密鑰,已經可以在短時間通過暴力破解方式破譯算法,所以本次採用2048位長度
[root@IDYS_01 ~]# ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
# 詢問將密鑰對文件放在什麼地方,默認放在家目錄的 .ssh/目錄下,此處直接敲擊回車
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
# 詢問對密鑰文件的加密密碼是,敲擊回車,代表不設置私鑰文件的加密密碼
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
cb:24:8f:31:b1:b6:b8:10:5f:d9:a2:01:39:49:d3:aa root@IDYS_01
The key's randomart image is:
+--[ RSA 2048]----+
|o+. |
|.o.. |
|o .. |
|.. + |
|+ = = S |
|E+ o o O . |
|. o o . + |
| . o . + |
| o.. |
+-----------------+
- 將公鑰文件上傳至服務器端
- 格式:
- ssh-copy-id 用戶名@服務器IP地址
- 該用戶名和要用來登錄服務器的用戶名一致
# 將公鑰傳送到服務器端,實現免密登錄
[root@IDYS_01 ~]# ssh-copy-id [email protected]
The authenticity of host '192.168.200.137 (192.168.200.137)' can't be established.
RSA key fingerprint is 24:09:71:ce:3c:a0:19:4e:84:f9:c9:03:8f:f2:74:b9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.200.137' (RSA) to the list of known hosts.
[email protected]'s password:
Now try logging into the machine, with "ssh '[email protected]'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
# 查看客戶端公鑰
[root@IDYS_01 .ssh]# cat ~/.ssh/id_rsa.pub
ssh-rsa ************************************************************************************************************************************************************************************************************************************Yv0w== root@IDYS_01
# 查看服務器端存儲的驗證密鑰
[root@IDYS_02 .ssh]# cat ~/.ssh/authorized_keys
ssh-rsa **************************************************************************************************************************************************************************************************************************************************************************************************************************Yv0w== root@IDYS_01
- 客戶端嘗試登錄服務器
- ssh 用戶名@服務器IP地址
- 密鑰對驗證優先級大於賬戶密碼驗證
# 因爲客戶端的id_rsa.pub和服務器端的authorized_keys一樣,所以客戶端能實現免密登錄服務器端,下面爲免密登錄成功的過程
[root@IDYS_01 .ssh]# ssh [email protected]
Last login: Tue Apr 28 23:59:51 2020 from 192.168.200.136
Windows使用密鑰對登錄Linux
-
使用Xshell自帶的密鑰對生成嚮導生成密鑰對
-
選擇[工具] -> [新建用戶密鑰生成嚮導]
- 選擇密鑰類型爲RSA,密鑰長度爲2048
- 然後選擇下一步,下一步,最後選擇完成
- 選擇工具,然後點擊用戶密鑰管理者選項
- 選擇【屬性】
- 選擇【公鑰】,然後將公鑰內容複製
- 進入服務端的
~/.ssh/
目錄下,創建authorized_keys文件,然後編輯文件將公鑰複製進去,操作如下,最後設置權限爲600
[root@dayuanshuai .ssh]# touch authorized_keys
[root@dayuanshuai .ssh]# vim authorized_keys
********************************************************************************************************************************************************************************************************************************************************== rsa 2048-042820
[root@dayuanshuai .ssh]# chmod 600 authorized_keys
ssh(secure shell)服務的配置文件說明
禁止使用密碼登錄
- 當我們學會了使用密鑰對進行驗證後,建議生產環境下將賬戶密碼登錄功能關掉
- 配置文件:/etc/ssh/sshd_config
- /etc/ssh/ssh_config爲客戶端配置文件
- /etc/ssh/sshd_config爲服務器端配置文件
- 選項:
- PasswordAuthentication no
注意:ssh的配置文件中,並不是註釋掉的就是不生效的,有些是默認生效,需要修改時一定要取消註釋再修改
禁止使用 root 遠程登錄
- root 在系統中是一個可以爲所欲爲的角色,我們可以在平時的操作中用普通用戶操作,在有需要修改一些系統設置的 時候再從普通用戶切換到 root 用戶,這樣可以最大限度的避免因爲誤操作而對系統造成破壞,同時也可以避免黑客在 暴力破解後直接使用 root 用戶登錄系統,一般在遠程登錄管理上我們會禁止直接使用 root 用戶登錄
- 配置文件:/etc/ssh/sshd_config
- 選項:
- PermitRootLogin no
修改默認端口、限制 ssh 監聽 IP
修改默認端口
- ssh 作爲一個用來遠程管理服務器的工具,需要特別的安全,默認情況下使用TCP的22端口,若不進行 修改,很容易被利用遭到攻擊,所以我們一般都會修改端口,儘量修改一個高位端口(範圍1-65535)
- 配置文件
- /etc/ssh/sshd_config
- 選項:
- Port 59527
- ssh -p 端口 用戶名@服務器IP
# 如果端口號變了 xshell登錄的命令可爲
(此選項爲ssh目錄端監聽的端口號)
ssh [email protected] 54321
- 查看已經開啓的服務中的端口
[root@dayuanshuai .ssh]# netstat -antp
限制ssh監聽IP:
- 有些服務器則安全級別更高一些,不允許使用外網直接登錄,只有通過局域網才能登錄,我們可以在 機房裏設置其中一臺能夠被外網遠程連接,其他的主機都通過這個機器進行遠程連接即可
- 配置文件:
- /etc/ssh/sshd_config
- 選項:
- ListenAddress 192.168.88.100
簡單來說就是服務器端設置自己監聽的ip地址,遠程想通過ssh服務連接該主機,就必須是連接的該IP才行
# 修改配置文件
[root@dayuanshuai .ssh]# vim /etc/ssh/sshd_config
ListenAddress 192.168.200.20
# 設置虛擬網卡爲192.168.200.20,以後ssh客戶端只能連接192.168.200.20 這個IP才能連接ssh服務器端
[root@dayuanshuai .ssh]# ifconfig eth0:0 192.168.200.20
ssh服務相關命令
scp:安全的遠程文件複製命令
- scp是secure copy的簡寫,用於在Linux下進行遠程拷貝文件的命令,類似於命令有cp,scp傳輸是加密的,所以可能 會稍微影響一點速度。另外,scp還非常不佔資源,不會提高多少系統負荷
- 格式:
- scp 本地文件 用戶名@服務器IP:目錄
- scp /tmp/test.txt [email protected]:/tmp/
- -P 端口
注意:如果要使用scp命令進行復制的話,客戶端和服務器端都應該安裝上openssh-clients 安裝包,不然會報錯。
- 報錯如下:
[root@IDYS_01 ~]# scp /tmp/test.txt [email protected]:/tmp/
bash: scp: command not found
lost connection
- 這個時候連接上服務器端,安裝上openssh-clients服務,然後重啓ssh服務,最後退回客戶端,然後再次使用scp實現複製就成功了.
# 連接上服務器端
[root@IDYS_01 ~]# ssh [email protected]
Last login: Wed Apr 29 03:40:09 2020 from 192.168.200.136
# 在服務器端安裝上opensssh-client這個安裝包
[root@IDYS_02 ~]# yum -y install openssh-clients
# 重啓ssh服務
[root@IDYS_02 ~]# service sshd restart
# 退出到客戶端
[root@IDYS_02 ~]# exit
logout
# 再次使用scp複製
[root@IDYS_01 ~]# scp /tmp/test.txt [email protected]:/tmp/
# 刪除文件
[root@IDYS_01 tmp]# rm test.txt
# 再從遠程服務器端複製到本地
[root@IDYS_01 tmp]# scp [email protected]:/tmp/test.txt /tmp
- 服務器端換端口後重新實現複製
# 在服務器端修改連接端口,連接端口改爲2222
[root@IDYS_02 ~]# vi /etc/ssh/sshd_config
Port 2222
# 在客戶端再次連接時需要指定端口2222,才能連接上ssh服務
[root@IDYS_01 tmp]# ssh -p 2222 192.168.200.137
# 這時再要通過scp複製文件時,需要通過大P指定ssh端口,才能實現複製
[root@IDYS_01 tmp]# scp -P 2222 [email protected]:/tmp/test.txt /tmp
test.txt 100% 0 0.0KB/s 00:00
sftp:安全的文件傳輸協議
- sftp是Secure FileTransferProtocol的縮寫,安全文件傳送協議。sftp與ftp有着幾乎一樣的語法和功能。由於這種 傳輸方式使用了加密/解密技術,所以sftp比ftp更安全一些,但傳輸效率比普通的FTP要低得多
- 格式:
- sftp 用戶名@服務器IP
- -oPort=端口
- 若端口不是默認22,則需要使用此格式指定端口
- 交互命令:
- help:查看在交互模式下支持哪些命令
- pwd / lpwd:pwd是查看服務器所在路徑;lpwd是查看客戶端所在路徑
- ls / lls:ls是查看服務器當前目錄下的文件列表;lls是查看客戶機當前所在路徑的所有文件列表
- lcd / cd: cd切換遠程服務器端目錄, lcd切換本地客戶端目錄
- put:將客戶機中的指定文件上傳到服務器端
- get:將服務器端的指定文件下載到客戶機的當前所在目錄
- rm:刪除掉服務器端的指定文件
- quit:退出sftp的交互模式,斷開和服務器之間的連接
- !COMMAND
- 在你需要使用的命令前加一個感嘆號!,即可使用本地客戶端shell命令
- version
- 查看版本號
# 連接上服務器端
[root@IDYS_01 tmp]# sftp [email protected]
Connecting to 192.168.200.137...
# 查看
sftp> help
Available commands:
bye Quit sftp
cd path Change remote directory to 'path'
************** #省略
#使用本地shell執行whoami,在whoami前面加一個感嘆號!即可執行本地客戶端shell的whoami
sftp> !whoami
root
# 可以看到命令前面加!執行的是本地客戶端的shell
sftp> !ifconfig
eth0 Link encap:Ethernet HWaddr *********
inet addr:192.168.200.136 Bcast:192.168.200.255 Mask:255.255.255.0
# 查看版本號
sftp> version
SFTP protocol version 3
# 將遠程目錄複製到本地目錄上來
(遠端文件) (本地目錄)
sftp> get /tmp/test.txt /tmp
# 將本地目錄上傳至遠端目錄
(本地文件) (遠端目錄)
sftp> put /tmp/IDYS01.txt /tmp/
# 遠程服務器端修改ssh的監聽端口
[root@IDYS_02 ~]# vim /etc/ssh/sshd_config
Port 2222
# 重啓服務
[root@IDYS_02 ~]# service sshd restart
# 退出到本地
[root@IDYS_02 ~]# exit
logout
# sftp指定端口,重新連接
[root@IDYS_01 tmp]# sftp -oPort=2222 [email protected]
Connecting to 192.168.200.137...
三種命令指定端口的方式
- ssh
- -p指定端口
- scp
- -P指定端口
- sftp
- -oPort=PORT :指定端口
- 如 -oPort=2222
- 寫在最後的話:
- 無論每個知識點的難易程度如何,我都會盡力將它描繪得足夠細緻
- 歡迎關注我的CSDN博客,IDYS’BLOG
- 持續更新內容:運維 | 網工 | 軟件技巧
- 如果你有什麼疑問,或者是難題。歡迎評論或者私信我。你若留言,我必回覆!
- 雖然我現在還很渺小,但我會做好每一篇內容。謝謝關注!