Linux SSH 服務

来源:https://www.cnblogs.com/llife/archive/2019/10/07/11632898.html
-Advertisement-
Play Games

本篇寫一些關於 Linux 網路中 SSH 服務的相關知識。 ...


CentOS-Logo

本篇寫一些關於Linux網路中SSH服務的相關知識。


測試環境

名稱 IP地址
host01 192.168.28.128
host02 192.168.28.129
host03 192.168.28.130

禁止 root 登錄

  • 查看ssh服務埠是否開啟
[root@host01 ~]# netstat -ntuap | grep sshd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      998/sshd            
tcp6       0      0 :::22                   :::*                    LISTEN      998/sshd            
  • 預設可以使用root用戶登錄
[root@host02 ~]# ssh [email protected]
The authenticity of host '192.168.28.128 (192.168.28.128)' can't be established.
ECDSA key fingerprint is SHA256:5GGc1rmzWwjF+ozz/PPTyLO2s6NmFHSxbzCNsLazXhY.
ECDSA key fingerprint is MD5:0b:f5:62:d7:a4:1f:05:64:0b:7f:22:62:11:64:07:61.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.28.128' (ECDSA) to the list of known hosts.
[email protected]'s password: 
Last login: Thu Sep 12 13:54:03 2019
[root@host01 ~]# logout
Connection to 192.168.28.128 closed.
  • 編輯配置文件,禁止root用戶登錄
[root@host01 ~]# vim /etc/ssh/sshd_config
PermitRootLogin no
  • 重新載入配置文件,使配置生效
[root@host01 ~]# systemctl reload sshd
  • 不可使用root用戶登錄
[root@host02 ~]# ssh [email protected]
[email protected]'s password: 
Permission denied, please try again.
[email protected]'s password: 
  • 添加普通用戶zhangsan
[root@host01 ~]# useradd zhangsan && echo "000000" | passwd --stdin zhangsan
Changing password for user zhangsan.
passwd: all authentication tokens updated successfully.
[root@host01 ~]# id zhangsan
uid=1001(zhangsan) gid=1001(zhangsan) groups=1001(zhangsan)
  • 現在以zhangsan登錄,發現可以切換至root用戶
[root@host02 ~]# ssh [email protected]
[email protected]'s password: 
[zhangsan@host01 ~]$ su - root
Password: 
Last login: Thu Sep 12 14:43:14 CST 2019 from 192.168.28.129 on pts/2
Last failed login: Thu Sep 12 14:46:39 CST 2019 from 192.168.28.129 on ssh:notty
There was 1 failed login attempt since the last successful login.
[root@host01 ~]# logout
[zhangsan@host01 ~]$ logout
Connection to 192.168.28.128 closed.
  • 可以開啟pam認證來禁止切換
[root@host01 ~]# vim /etc/pam.d/su
auth            required        pam_wheel.so use_uid
  • 現在不可以使用zhangsan做跳板切換至root用戶
[root@host02 ~]# ssh [email protected]
[email protected]'s password: 
Last login: Thu Sep 12 14:56:01 2019 from 192.168.28.129
[zhangsan@host01 ~]$ su - root
Password: 
su: Permission denied
[zhangsan@host01 ~]$ logout
Connection to 192.168.28.128 closed.
  • zhangsan添加至wheel
[root@host01 ~]# gpasswd -a zhangsan wheel
Adding user zhangsan to group wheel
[root@host01 ~]# id zhangsan
uid=1001(zhangsan) gid=1001(zhangsan) groups=1001(zhangsan),10(wheel)
  • 只有在wheel組中的用戶才可以使用su命令
[root@host02 ~]# ssh [email protected]
[email protected]'s password: 
Last login: Thu Sep 12 14:59:14 2019 from 192.168.28.129
[zhangsan@host01 ~]$ su - root
Password: 
Last login: Thu Sep 12 14:56:13 CST 2019 on pts/2
Last failed login: Thu Sep 12 14:59:25 CST 2019 on pts/2
There was 1 failed login attempt since the last successful login.
[root@host01 ~]# logout
[zhangsan@host01 ~]$ logout
Connection to 192.168.28.128 closed.

登錄次數嘗試

  • 配置文件預設是6次,但嘗試3次就不可再嘗試
[root@host02 ~]# ssh [email protected]
[email protected]'s password: 
Permission denied, please try again.
[email protected]'s password: 
Permission denied, please try again.
[email protected]'s password: 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
  • 設置參數最大次數為5
[root@host01 ~]# vim /etc/ssh/sshd_config
MaxAuthTries 5
  • 重新載入配置文件,使配置生效
[root@host01 ~]# systemctl reload sshd
  • 想要使配置能夠有意義,需要使用-o NumberOfPasswordPrompts=8參數,這裡嘗試8次,發現5次後被拒絕嘗試。
[root@host02 ~]# ssh -o NumberOfPasswordPrompts=8 [email protected]
[email protected]'s password: 
Permission denied, please try again.
[email protected]'s password: 
Permission denied, please try again.
[email protected]'s password: 
Permission denied, please try again.
[email protected]'s password: 
Permission denied, please try again.
[email protected]'s password: 
Received disconnect from 192.168.28.128 port 22:2: Too many authentication failures
Authentication failed.

黑白名單

  • 添加lisiwangwu用戶
[root@host01 ~]# useradd lisi && echo "000000" | passwd --stdin lisi
Changing password for user lisi.
passwd: all authentication tokens updated successfully.
[root@host01 ~]# useradd wangwu && echo "000000" | passwd --stdin wangwu
Changing password for user wangwu.
passwd: all authentication tokens updated successfully.
  • 添加白名單配置,預設沒有相關條目zhangsan只能從129登錄,lisi可以從任何主機登錄
[root@host01 ~]# vim /etc/ssh/sshd_config
AllowUsers [email protected] lisi

白名單:AllowUsers,黑名單:DenyUsers,不要同時使用。

  • 重新載入配置文件,使配置生效
[root@host01 ~]# systemctl reload sshd
  • 測試zhangsan可以從129登錄
[root@host02 ~]# ssh [email protected]
[email protected]'s password: 
Last login: Thu Sep 12 16:53:09 2019 from 192.168.28.129
[zhangsan@host01 ~]$ logout
Connection to 192.168.28.128 closed.
  • 測試lisi可以從129登錄
[root@host02 ~]# ssh [email protected]
[email protected]'s password: 
[lisi@host01 ~]$ logout
Connection to 192.168.28.128 closed.
  • 測試wangwu不可從129登錄
[root@host02 ~]# ssh [email protected]
[email protected]'s password: 
Permission denied, please try again.
[email protected]'s password: 
  • 測試zhangsan不可從130登錄
[root@host03 ~]# ssh [email protected]
[email protected]'s password: 
Permission denied, please try again.
[email protected]'s password: 
  • 測試lisi可以從130登錄
[root@host03 ~]# ssh [email protected]
[email protected]'s password: 
Last login: Thu Sep 12 16:56:07 2019 from 192.168.28.129
[lisi@host01 ~]$ logout
Connection to 192.168.28.128 closed.
  • 測試wangwu不可從130登錄
[root@host03 ~]# ssh [email protected]
[email protected]'s password: 
Permission denied, please try again.
[email protected]'s password: 

使用密鑰對登錄

  • 開啟密鑰認證選項
[root@host01 ~]# vim /etc/ssh/sshd_config
PubkeyAuthentication yes
  • 重新載入配置文件,使配置生效
[root@host01 ~]# systemctl reload sshd
  • 生成類型為ecdsa橢圓曲線數字簽名加密的密鑰,可以設置一個密碼
[root@host02 ~]# ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.
Enter file in which to save the key (/root/.ssh/id_ecdsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_ecdsa.
Your public key has been saved in /root/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:Y4AjDPfBRwYAP5exUlv7Obn08cvhSZzAsZ6Mwqt/ccE root@host02
The key's randomart image is:
+---[ECDSA 256]---+
|o.oo=o+          |
| = o.X..         |
|  * O.o  ..      |
|   = . o +Eo     |
|        S =.     |
|     . o.O.* .   |
|      o oo= *    |
|       o.  + +   |
|    .oo.    =    |
+----[SHA256]-----+
  • 查看生成的私鑰和公鑰文件
[root@host02 ~]# ls .ssh/
id_ecdsa  id_ecdsa.pub
  • 推送公鑰文件至128lisi用戶
[root@host02 ~]# ssh-copy-id -i .ssh/id_ecdsa.pub [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_ecdsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.
  • 本地會生成一個已知主機文件
[root@host02 ~]# ls .ssh/
id_ecdsa  id_ecdsa.pub  known_hosts
  • 可以查看一下
[root@host02 ~]# cat .ssh/known_hosts
192.168.28.128 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBG/cLQC3IgLKJnuYS8mOuhuJjfnMT4V2CsSJ6GNFgBlmANrik1sLgUeSIfyPOeirGfyz0En3/AAyI+slLpA/3lQ=
  • 128lisi用戶下生成了認證密鑰
[root@host01 ~]# cat /home/lisi/.ssh/authorized_keys 
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEE/8T2xbTo11fmJu5sAc43OyUELuvl6OvcEiJ4WrZxaD9QR+PmJCxLZoVd5+HwyT6PFmW7EZjMk8NogcnDc9HI= root@host02
  • 使用128lisi用戶ssh登錄,提示輸入先前設置的密碼
[root@host02 ~]# ssh [email protected]
Enter passphrase for key '/root/.ssh/id_ecdsa': 
Last login: Thu Sep 12 17:09:37 2019 from 192.168.28.129
[lisi@host01 ~]$ logout
Connection to 192.168.28.128 closed.
  • 可以設置免驗證操作,並輸入先前設置的密碼
[root@host02 ~]# ssh-agent bash
[root@host02 ~]# ssh-add
Enter passphrase for /root/.ssh/id_ecdsa: 
Identity added: /root/.ssh/id_ecdsa (/root/.ssh/id_ecdsa)
  • 現在可以免密碼登錄
[root@host02 ~]# ssh [email protected]
Last login: Tue Sep 17 00:40:47 2019 from 192.168.28.129
[lisi@host01 ~]$ logout
Connection to 192.168.28.128 closed.

更改預設埠

  • 關閉防火牆、SELinux
[root@host01 ~]# systemctl stop firewalld
[root@host01 ~]# setenforce 0
  • 更改預設埠222233
[root@host01 ~]# vim /etc/ssh/sshd_config
Port 2233
  • 重新載入配置文件,使配置生效
[root@host01 ~]# systemctl reload sshd
[root@host01 ~]# netstat -ntuap | grep sshd
tcp        0      0 0.0.0.0:2233            0.0.0.0:*               LISTEN      41357/sshd          
tcp6       0      0 :::2233                 :::*                    LISTEN      41357/sshd          
  • 直接登錄失敗
[root@host02 ~]# ssh [email protected]
ssh: connect to host 192.168.28.128 port 22: Connection refused
  • 指定埠登錄成功
[root@host02 ~]# ssh -p 2233 [email protected]
Last login: Tue Sep 17 01:21:11 2019 from 192.168.28.129
[lisi@host01 ~]$ logout
Connection to 192.168.28.128 closed.

scp 遠程複製

  • 創建測試文件、文件夾
[root@host02 ~]# echo "this is testfile01" > testfile01.txt 
[root@host02 ~]# mkdir testdir01
  • 遠程複製文件
[root@host02 ~]# scp testfile01.txt [email protected]:/opt/
[email protected]'s password: 
testfile01.txt                                                                                                                                             100%   19    11.4KB/s   00:00    
  • 遠程複製文件夾
[root@host02 ~]# scp -r testdir01/ [email protected]:/opt/
[email protected]'s password: 
  • 查看是否複製成功
[root@host01 ~]# ls /opt/
rh  testdir01  testfile.txt

sftp 安全文件傳輸協議

  • 登錄
[root@host02 ~]# sftp [email protected]
[email protected]'s password: 
Connected to 192.168.28.128.
sftp> 
  • 可以cd切換目錄,ls查看,put上傳
sftp> cd /home/zhangsan/
sftp> ls
sftp> put /root/testfile01.txt
Uploading /root/testfile01.txt to /home/zhangsan/testfile01.txt
/root/testfile01.txt                                                                                                                                       100%   19    32.8KB/s   00:00    
sftp> ls
testfile01.txt   
  • 上傳成功
[root@host01 ~]# ls /home/zhangsan/
testfile01.txt
  • get下載
sftp> get /etc/passwd 
Fetching /etc/passwd to passwd
/etc/passwd                                                                                                                                                100% 2227     1.8MB/s   00:00    
sftp> bye
  • 下載成功
[root@host02 ~]# ls
anaconda-ks.cfg  passwd  testdir01  testfile01.txt

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 名詞bitellos大鑽石 四大鑽石指的就是“攝政王”、“南非之星”、“藍色希望”和“光明之山”四顆鑽石。經過琢磨的鑽石光彩奪目、燦爛無比,歷來被譽為“寶石之王”,科研領域里大顆粒的鑽石叫做bitellos大顆粒的鑽石更是稀世珍寶。 說起鑽石,人們首先想到的就是財富、地位和榮耀。確實,經過琢磨的鑽石 ...
  • <Image Source="pack://application:,,,/Images/Folder-icon.png"/> <Image Source="pack://application:,,,/Assembly;component/Images/Folder-icon.png"/> <Im ...
  • 我們在使用C#編程的時候,經常使用反射來動態調用方法,但有時候需要動態的生成方法,下麵介紹使用表達式樹的方式來自動生成方法,並調用。 首先需要說明什麼是表達式,熟悉Linq的程式猿都用過類似於下麵的代碼:t=>t.Length<=25; 在C#中=>代表這是一個Lambda表達式,它用來對數組進行查 ...
  • 最近有人問我圖像處理怎麼研究,怎麼入門,怎麼應用,我竟一時語塞。仔細想想,自己也搞了兩年圖像方面的研究,做個兩個創新項目,發過兩篇論文,也算是有點心得,於是總結總結和大家分享,希望能對大家有所幫助。 在寫這篇教程之前我本想多弄點插圖,讓文章看起來花哨一點,後來我覺得沒必要這樣做,大家花時間沉下心來讀 ...
  • 大規模裝機時,使用無人值守裝機便可大大簡便人工操作,提高效率。 ...
  • 本篇主要寫了怎麼搭建自定義的 YUM 源,在一個擁有大量本地網路的主機環境中,可以減少對外網的依賴。 ...
  • 通過 NFS 網路文件系統,可以通過網路共用目錄,讓網路上的其他主機可以通過掛載訪問共用目錄的數據。 ...
  • 在 Linux 中,許多網路服務針對客戶機提供訪問控制機制,而 TCP Wrappers 是應用服務與網路之間的一道特殊的防線,提供額外的安全保障。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...