Windows 管理員的 Linux SSH 命令大師

Linux和Windows曾经是死敌,但现在它们之间的关系变得更加友好。事实上,现在你甚至可以在Windows上原生地使用SSH:作为客户端和服务器。当你是一个Windows管理员但同时需要管理Linux机器时,你需要习惯在Linux中使用(安全外壳)SSH命令!

这是博客文章系列《一个Windows人在Linux世界中》的第四部分。如果你想了解更多关于流行Linux概念的信息,一定要查看第一部分第二部分第三部分

在本文中,你将学习如何在Linux中启用SSH,以及如何设置你的Windows SSH客户端来连接远程Linux服务器。

注意:所有示例将使用OpenSUSE Linux

远离桌面环境

在这个系列的第一个文章中,教程建议使用KDE桌面环境。在进行OpenSUSE设置时,你可能看到另一个诱人的选项;OpenSUSE的服务器版本。

Server Edition of OpenSUSE

如果您安裝了大多數Linux發行版(包括OpenSUSE)的伺服器版本,您可能會注意到完全沒有桌面。大多數熱門發行版的伺服器版本(例如OpenSUSE、Ubuntu Server和CentOS)就像是Windows Server Core:沒有可言的桌面。

要理解為什麼桌面在Linux文化中通常被忽視,您需要了解CLI和SSH。

SSH:遠程管理的黃金標準

SSH與許多其他遠程管理協議一樣,是一個基於客戶端和服務器的系統。客戶端通過網絡遠程連接到服務器,允許您運行命令(甚至傳輸文件)。在遠程管理Linux方面,SSH是事實上的標準。

由於SSH已經存在很長時間並深深嵌入Linux生態系統中,命令行管理工具在Linux伺服器環境中佔據主導地位。大多數Linux伺服器發行版沒有圖形界面。

在Linux中使用SSH命令

言歸正傳。現在讓我們看看SSH可以做些什麼,首先在OpenSUSE Linux中啟用它。要這樣做,使用YaST套件管理器。在OpenSUSE中使用YaST啟用SSH:

  1. 點擊開始菜單,輸入terminal,並選擇Konsole(假設您在安裝OpenSUSE時已經安裝了KDE桌面管理器)。
  2. 在终端中运行sudo yast来打开YaST。
  3. 进入YaST后,向下箭头到系统,然后向右箭头到服务管理器并按Enter键继续。
  4. 向下箭头到sshd,按下alt+s来启动SSH服务。
  5. 按下alt+r将启动模式从手动更改为开机启动。这将确保SSH服务器服务在重启后仍然会启动。
  6. 按下alt+o来确认更改并应用它们。

您可以在下面看到这些步骤的操作过程。

Using YaST from the command line to enable SSH

通过防火墙允许SSH访问

几乎每个Linux发行版都配备了一种防火墙来保护它,就像Windows一样。您可以在此处阅读有关OpenSUSE防火墙的信息here。为了确保您可以远程访问Windows上的SSH服务,您必须通过防火墙允许它。操作如下:

  1. 仍然在终端中,使用sudo yast再次启动YaST。
  2. 向下箭头到安全性和用户,然后向右箭头到防火墙并按Enter键继续。
  3. 导航到区域 -> 公共,然后向右箭头到右侧的服务-端口窗格。
  4. 向下箭头查找服务中的ssh
  5. 使用空格键选择ssh,然后按alt+d添加所选内容。
  6. 按下alt+a接受更改。

您可以在下面的图示中看到上面的所有步骤。

Using YaST from the command line to let SSH through the firewall

与Windows一样,Linux也有不同的信任级别来应用防火墙规则。这些级别被称为区域。Windows默认具有公共、工作和专用区域。Linux有更多的区域,但默认为公共区域。

从Windows连接到Linux

幸运的是,如今的Windows 10内置了SSH客户端。要连接到Linux主机,打开命令提示符(cmd)或PowerShell控制台,并指定要连接的用户名和IP或主机名。

> ssh <username>@<ip address>

如果一切顺利,SSH客户端会要求您接受一个指纹。指纹是一个标识符,用于确保没有人劫持目标IP地址。

如果您正在运行Windows 7,仍然可以通过SSH连接到Linux主机。您只需要从这里下载Microsoft SSH客户端。这个SSH客户端与Windows 10使用的是同一个。

一旦您输入yes并输入密码,您就连接到了服务器!现在,您可以像在计算机本身上打开终端一样使用命令行。

不要通过路由器将SSH(默认端口22)暴露到互联网上。机器人会不断搜索互联网上的开放SSH端口。一旦机器人找到一个开放的端口,它们就会开始垃圾邮件式地尝试暴力破解。

在Windows中啟用SSH的滑鼠支援

使用原生的Windows 10 SSH客戶端(至少在撰寫本文時)的一個重大缺點是缺乏滑鼠支援。這意味著您無法像在先前的博文中學到的那樣在午夜指揮官中使用滑鼠。

幸運的是,在OpenSSH Windows客戶端的第八版之後,您可以獲得滑鼠支援!讓我們安裝這個客戶端。

  1. 從這裡下載最新版本的OpenSSH-Win64並解壓縮生成的zip文件。本教程將假設您將其解壓縮到~\Downloads\OpenSSH-Win64
  2. 打開PowerShell控制台,使用cd ~\Downloads\OpenSSH-Win64導航到~\Downloads\OpenSSH-Win64
  3. 執行.\\ssh -V檢查SSH客戶端版本。撰寫本指南時,版本應為8.1.0.0-p1。
  4. 使用.\ssh <user>@<ip>連接到Linux伺服器。
  5. 登入後,執行mc來運行午夜指揮官,以確保您可以使用滑鼠。

您可以在下面的視覺化表示中看到上述所有步驟。

覆蓋默認的SSH客戶端

如果您想更长期地使用新版本,您可以覆盖默认的Windows 10 SSH客户端。这样,每当您在命令行上运行ssh时,将使用较新版本(带有鼠标支持)。

假设您已将客户端提取到~\Downloads\OpenSSH-Win64文件夹

  1. 将提取的OpenSSH-Win64文件夹移动到您选择的永久文件夹。本教程将使用C:\users\public\OpenSSH-Win64
  2. 转到开始然后运行,键入sysdm.cpl,或者从控制面板打开系统
  3. 高级选项卡下,点击环境变量
  4. 系统变量下,点击Path
  5. 点击新建以添加一个新的路径,并提供SSH客户端的文件夹路径(在此例中为C:\users\public\OpenSSH-Win64)。
  6. 点击上移直到它位于%SystemRoot%\system32文件夹上面。这样,当您在命令行上输入ssh时,Windows将首先在此处查找。
  7. 打开PowerShell控制台并运行ssh -V。您应该看到版本号为8.1.0.0-p

以下是这些步骤的概述。

Overriding the Default SSH Client

将一个文件夹优先于%SystemRoot%\system32 可能存在安全风险。如果有人可以访问您的计算机,他们可以决定将病毒插入到OpenSSH-Win64文件夹中,并将其命名为Windows实用程序,例如cd.exe

您應該將OpenSSH-Win64文件夾的讀取權限限制為只有管理員可以讀取。

  1. 右鍵點擊OpenSSH-Win64文件夾,並點擊屬性
  2. 安全標籤下,點擊高級按鈕。
  3. 點擊停用繼承以允許自定義文件夾權限,並防止父文件夾覆蓋OpenSSH-Win64文件夾的權限。
  4. 選擇新增,找到管理員組並給予他們完全權限。
  5. 點擊新增,找到每個人組並給予他們只讀權限。
  6. 選中替換所有子對象權限勾選框以將這些設置應用到OpenSSH-Win64文件夾中的所有文件;點擊應用
  7. 現在,通過在OpenSSH-Win64文件夾中創建新文件來測試這些權限。Windows應該要求管理員提示。

您可以在下面的視覺化示例中查看所有這些步驟。

restrict the OpenSSH-Win64 folder

使用Tmux管理斷開的會話

啊,真麻煩!您正在通過SSH運行一個長時間執行的命令,結果網絡中斷了。現在您不知道Linux服務器的狀態如何!該命令執行完了嗎?如何恢復?

斷線的 SSH 連線是一個合理的問題,幸運的是有一個簡單的解決方案。你需要一個終端多工器 (tmux)。

Tmux 同時是終端多工器的縮寫和程式本身的名稱。

Tmux 是 SSH 的會話管理工具。如果你斷線了,它會「保持」這個會話並在背景中繼續運行。你可以稍後重新連接到該會話,甚至可以創建多個會話並在它們之間切換。

要使用 tmux 管理斷線的會話:

  1. 在 Linux 終端中,通過運行以下命令 sudo zypper install -y tmux 下載並安裝 tmux 工具,如下所示:

你也可以使用 YaST 下載 tmux 工具。

Tmux Utility

大多數的Linux發行版都有不同的命令行套件管理器。OpenSUSE使用zypper。Arch使用pacman。Ubuntu使用apt。Red Hat使用dnfyum。幸運的是,這些套件管理器的語法在各個發行版中都相當相似。

2. 在您的Windows電腦上,打開PowerShell控制台並通過SSH連接到您的Linux服務器。本教程將使用用戶名homelab和Linux服務器IP為192.168.134.169。

ssh <username>@<ip address>

3. 連接後運行tmux以打開tmux。您應該能在底部看到一個綠色的條

4. 執行一個輸出一些文本的命令。無論是什麼命令都可以。本教程使用的是neofetch。您也可以運行ls

5. 關閉PowerShell以斷開會話。這個操作模擬了斷線。

6. 再次使用SSH重新連接到您的Linux服務器。

7. 現在運行tmux a重新附加到之前的會話。您應該仍然能看到之前那個ls命令的輸出。太好了,斷線後沒有丟失數據!

您可以在下面的視覺化表示中看到以上所有步驟。

Managing Disconnected Sessions with a Tmux

如果您在Midnight Commander实用程序内运行tmux,您可能会注意到没有鼠标支持。您可以通过运行mc -x来解决这个问题。

在登录时启用tmux

默认情况下,tmux不会在所有SSH会话中可用。您可以通过强制tmux在每次登录时连接到您的SSH会话来更改此设置。

假设您已经通过SSH连接到Linux服务器:

  1. 使用mc打开midnight commander实用程序。

2. 高亮显示.bashrc文件,然后点击编辑

.bashrc文件是一种在每次通过命令行登录时运行的shell(批处理)脚本

3. 将下面的Shell脚本代码添加到文本文件的末尾。

if [ -z "$TMUX" ]; then tmux attach -t default || tmux new -s default fi

4. 当提示时,点击退出并保存。

5. 通过断开SSH会话并重新加入来测试tmux自动连接。您应该会自动获得底部的绿色条,表示您已连接到一个tmux会话!

这只是展示了tmux能做的一小部分,它是一个非常强大的多任务程序。如果您问任何Linux管理员他们最常用的命令是什么,答案可能是tmux

总结

这就是一个生活在Linux世界的Windows小伙子博客系列的最新文章。请继续关注ATA博客以获取即将推出的下一篇文章!

Source:
https://adamtheautomator.com/ssh-command-in-linux/