Linux 中最常見(jiàn)的 SSH 命令用法和配置
摘要:在本指南中,我們將探討常見(jiàn)的 SSH 用例。我們還將討論您在日常生活中可以使用的常用 SSH 協(xié)議,以提高您的工作效率。
Secure Shell (SSH) 是一種廣泛接受的網(wǎng)絡(luò)協(xié)議,它允許我們以安全的方式與遠(yuǎn)程主機(jī)進(jìn)行交互。它通過(guò)加密數(shù)據(jù)庫(kù)中的所有鏈接來(lái)提供安全性。
如何在 Linux 中使用 SSH 命令
在本節(jié)中,我們將討論 SSH 協(xié)議的一些流行用例。
使用 telnet、netcat 等協(xié)議與遠(yuǎn)程 Linux 主機(jī)交互的方法有多種。但是,由于缺乏加密,這些方法都是不安全的。我們可以使用 SSH 協(xié)議來(lái)允許主機(jī)之間進(jìn)行安全通信。
我們需要使用 SSH 客戶端與遠(yuǎn)程主機(jī)進(jìn)行交互。Linux 有許多基于 GUI 和 CLI 的客戶端。但是,在本指南中,我們將使用名為 ssh 的命令行實(shí)用程序。默認(rèn)情況下,大多數(shù) Linux 發(fā)行版都提供 ssh 實(shí)用程序。
SSH命令的語(yǔ)法如下:
$ssh[選項(xiàng)][命令][參數(shù)]
這里方括號(hào)代表([])可選參數(shù),而方括號(hào)(<>)代表強(qiáng)制參數(shù)。
讓我們使用 ssh 客戶端連接到遠(yuǎn)程主機(jī):
$ ssh -l 根 192.168.19.130
在此示例中,我們使用選項(xiàng)指定登錄名-l,目標(biāo)為 192.168.19.130。輸入正確的密碼后,SSH 連接建立。現(xiàn)在,我們可以在遠(yuǎn)程主機(jī)以及本地系統(tǒng)上執(zhí)行命令。
# 主機(jī)名
要結(jié)束會(huì)話,我們可以使用退出命令或ctrl+D組合鍵。
值得注意的是,我們必須為每個(gè)新會(huì)話向遠(yuǎn)程主機(jī)進(jìn)行身份驗(yàn)證。為了避免每次都輸入密碼,我們可以配置SSH無(wú)密碼登錄。
在上一節(jié)中,我們了解了如何連接到遠(yuǎn)程主機(jī),這僅在我們要長(zhǎng)時(shí)間使用遠(yuǎn)程主機(jī)時(shí)才有意義。有時(shí)我們只需要在遠(yuǎn)程主機(jī)上運(yùn)行一兩個(gè)命令。在這種情況下,我們可能會(huì)在不延長(zhǎng)時(shí)間的情況下執(zhí)行此類訂單。
讓我們?cè)谶h(yuǎn)程主機(jī)上運(yùn)行 hostname 命令:
$ ssh -l root 192.168.19.130 主機(jī)名
同樣的方式,我們可以在遠(yuǎn)程Linux機(jī)器上運(yùn)行多個(gè)命令:
$ssh -l root 192.168.19.130 '主機(jī)名;密碼'
需要注意的是,命令必須用引號(hào)括起來(lái)并用分號(hào)字符分隔(;)。要在多個(gè)遠(yuǎn)程 Linux 主機(jī)上運(yùn)行命令,請(qǐng)閱讀我們的文章 – Pssh – 在多個(gè)遠(yuǎn)程 Linux 主機(jī)上運(yùn)行命令。
與命令一樣,我們也可以在遠(yuǎn)程主機(jī)上運(yùn)行本地腳本。讓我們通過(guò)一個(gè)例子來(lái)理解這一點(diǎn)。
首先在具有可執(zhí)行權(quán)限的本地計(jì)算機(jī)上運(yùn)行一個(gè)簡(jiǎn)單的 shell 腳本:
$catscript.sh
主機(jī)名
密碼
現(xiàn)在,讓我們?cè)谶h(yuǎn)程主機(jī)上執(zhí)行此操作:
$ ssh [ 電子郵件 'bash -s' < ./script.sh
在此示例中,我們使用 bash-s選項(xiàng)從默認(rèn)文本中讀取文本。
我們經(jīng)常使用文件和文件夾。用戶經(jīng)常執(zhí)行的一項(xiàng)任務(wù)是下載文件夾和文件。與本地計(jì)算機(jī)類似,我們可以使用 scp 命令在遠(yuǎn)程主機(jī)之間復(fù)制文件和文件夾,該命令使用 SSH 協(xié)議安全地復(fù)制文件。
讓我們將 script.sh 文件復(fù)制到遠(yuǎn)程主機(jī)上的 /tmp 文件夾:
$ scp 腳本 .sh [ 電子郵件 : / tmp
現(xiàn)在,檢查文件是否已下載:
$ssh[電子郵件'ls/tmp/script.sh'
同樣的,我們可以使用scp命令來(lái)復(fù)制文件夾。但是,我們需要-r在命令中使用該選項(xiàng)。
SSH 支持使用 gzip 壓縮機(jī)制進(jìn)行數(shù)據(jù)壓縮,該機(jī)制封裝了所有可能的數(shù)據(jù)流,例如 stdin、stdout、stderr 等。當(dāng)使用慢速網(wǎng)絡(luò)連接時(shí),此選項(xiàng)變得非常有用。
-C我們可以使用以下選項(xiàng)通過(guò) SSH 啟用壓縮:
$ssh -C -l root 192.168.19.130 '主機(jī)名'
Linux 用戶經(jīng)常需要調(diào)整 SSH 會(huì)話來(lái)調(diào)查各種 SSH 連接和配置問(wèn)題。在這種情況下,我們可以啟用詳細(xì)模式來(lái)打印當(dāng)前的調(diào)試日志。
讓我們-v使用以下選項(xiàng)啟用詳細(xì)模式:
$ ssh -v -l root 192.168.19.130 主機(jī)名
除此之外,我們還可以使用-v多種選項(xiàng)來(lái)提高表達(dá)水平。
的
-v– 將表達(dá)級(jí)別設(shè)置為 1 并提供有關(guān)客戶端活動(dòng)的詳細(xì)信息。
-vv– 將表達(dá)式級(jí)別設(shè)置為 2,并提供有關(guān)客戶端和服務(wù)器端活動(dòng)的詳細(xì)信息。
-vvv– 將表達(dá)式級(jí)別設(shè)置為 3,并提供有關(guān)客戶端和服務(wù)器端活動(dòng)的更詳細(xì)信息。
的
SSH 支持的最大詳細(xì)級(jí)別是 3。讓我們看看實(shí)際情況:
$ssh -vvv -l root 192.168.19.130 主機(jī)名
在上面的示例中,debug1 表示按詳細(xì)級(jí)別 1 處理的調(diào)試消息。類似地,debug2 和 debug3 分別表示按詳細(xì)級(jí)別 2 和 3 處理的調(diào)試消息。
我們可以使用流協(xié)議和 SSH 來(lái)管理客戶端端點(diǎn)會(huì)話。讓我們回顧一下常用的流程模式和相關(guān)用例。
有時(shí)我們需要在本地計(jì)算機(jī)上運(yùn)行一些操作而不終止當(dāng)前的 SSH 會(huì)話。在這種情況下,我們可以~ + ctrl+z使用按鍵序列暫停當(dāng)前會(huì)話。
首先,登錄遠(yuǎn)程主機(jī)并運(yùn)行hostname命令:
$ ssh -l 根 192.168.19.130
# 主機(jī)名
接下來(lái),要暫停當(dāng)前會(huì)話,請(qǐng)先鍵入波浪號(hào)(~)字符,然后按ctrl+z年份鍵。需要注意的是,在單擊(~)之前,波浪號(hào)字符不會(huì)出現(xiàn)在標(biāo)準(zhǔn)輸出上ctrl+z。
現(xiàn)在,讓我們確認(rèn)會(huì)議已終止:
$ 職位
在這里,我們可以看到當(dāng)前的 SSH 會(huì)話正在后臺(tái)運(yùn)行。
讓我們使用 fg 命令重新啟動(dòng)會(huì)話并運(yùn)行主機(jī)名命令:
$fg %1
我確信您可能見(jiàn)過(guò)凍結(jié)的 SSH 會(huì)話,當(dāng)會(huì)話被不穩(wěn)定的網(wǎng)絡(luò)中斷時(shí)就會(huì)發(fā)生這種情況。這里我們不能使用 exit 命令終止會(huì)話。但是,我們可以\~ + .\使用按鍵序列來(lái)終止它。
首先,登錄遠(yuǎn)程主機(jī):
$ ssh -l 根 192.168.19.130
現(xiàn)在使用\~ + .\組合鍵結(jié)束當(dāng)前會(huì)話。
在此示例中,我們可以看到 SSH 顯示消息 – 與 192.168.19.130 的連接已關(guān)閉。
一個(gè)有趣的功能是,有一個(gè)流模式列出了所有支持的流模式。我們可以用\~ + ?”流程圖來(lái)列出支持的流程模式:
這里我們必須按回車鍵才能退出幫助菜單。
如何在 Linux 中配置 SSH
在本節(jié)中,我們將討論服務(wù)器端配置以強(qiáng)化 SSH 服務(wù)器。SSH 服務(wù)器將其所有設(shè)置存儲(chǔ)在 /etc/ssh/sshd_config 文件中。需要注意的是,更新 SSH 配置需要 root 用戶權(quán)限。
作為最佳實(shí)踐,我們應(yīng)該始終在建立 SSH 連接之前顯示該標(biāo)志。在某些情況下,它會(huì)阻止未經(jīng)授權(quán)的用戶訪問(wèn)遠(yuǎn)程主機(jī)。讓我們看看如何逐步完成此過(guò)程。
首先,在遠(yuǎn)程服務(wù)器上創(chuàng)建一個(gè)包含警告消息的文本文件:
# 我們/etc/banner.txt
接下來(lái),添加以下標(biāo)志消息:
****************************************************** ******************
警告 ?。?!您正在嘗試登錄 techmint.com 的服務(wù)器。
該服務(wù)器上的所有活動(dòng)都會(huì)受到監(jiān)控。
如果您不是授權(quán)用戶,請(qǐng)立即終止會(huì)話。
****************************************************** ******************
接下來(lái),打開(kāi) /etc/ssh/sshd_config 文件并使用 Banner 指令指定該文件:
橫幅 /etc/banner.txt
現(xiàn)在,重新啟動(dòng) sshd 服務(wù)并使用 exit 命令結(jié)束會(huì)話:
# systemctl 重新啟動(dòng) sshd
# 出口
最后,通過(guò)登錄遠(yuǎn)程主機(jī)來(lái)驗(yàn)證該標(biāo)志:
$ ssh -l 根 192.168.19.130
在這里我們可以讓服務(wù)器正確顯示 SSH 橫幅。
至此,我們已經(jīng)使用root用戶登錄遠(yuǎn)程主機(jī)了。然而,這違背了最小特權(quán)原則。在生產(chǎn)環(huán)境中,始終限制 root 用戶訪問(wèn)以提高安全性。
我們可以使用 PermitRootLogin 指令來(lái)限制 root 用戶訪問(wèn)。
首先打開(kāi) /etc/ssh/sshd_config 文件并使用選項(xiàng)no和 PermitRootLogin 指令:
允許根登錄 否
現(xiàn)在,重新啟動(dòng) sshd 服務(wù)并使用 exit 命令結(jié)束會(huì)話:
# systemctl 重新啟動(dòng) sshd
# 出口
最后,通過(guò)創(chuàng)建新的 SSH 會(huì)話來(lái)驗(yàn)證這一點(diǎn):
$ ssh -l 根 192.168.19.130
這里我們可以注意到我們無(wú)法使用root用戶訪問(wèn)遠(yuǎn)程主機(jī)。為了允許 root 用戶訪問(wèn),我們可以使用yes相同的選項(xiàng)和指令。
默認(rèn)情況下,SSH 使用 TCP 端口 22。但是,我們可以將 SSH 配置為在不同端口(即 8088)上運(yùn)行。
首先打開(kāi) /etc/ssh/sshd_config 文件并使用 8088 值和 Port 指令:
8088端口
接下來(lái),重新啟動(dòng) sshd 服務(wù)并結(jié)束會(huì)話:
# systemctl 重新啟動(dòng) sshd
# 出口
現(xiàn)在,讓我們深入了解遠(yuǎn)程托管:
$ssh -p 8088 -l 根 192.168.19.130
在本例中,我們使用-p選項(xiàng)來(lái)指定端口號(hào)。
在某些情況下,我們需要采取一些額外的步驟來(lái)允許非主端口上的連接。例如識(shí)別可用端口、編輯防火墻規(guī)則、SELinux 設(shè)置等。
在本文中,我們討論 SSH 配置和常見(jiàn)用例。接下來(lái),我們討論一些常見(jiàn)的選項(xiàng)。最后,我們討論一些保護(hù) SSH 服務(wù)器的設(shè)置。
您知道 Linux 中 SSH 命令的其他最佳用法嗎?請(qǐng)?jiān)谙旅娴脑u(píng)論中告訴我們您的想法。