如何使用 SSH 连接远程服务器

介紹

作為系統管理員必須精通的一項工具是 SSH。

SSH,或安全外殼,是用於安全登錄到遠程系統的協議。它是訪問遠程 Linux 服務器的最常見方式。

在本指南中,我們將討論如何使用 SSH 連接到遠程系統。

使用 DigitalOcean App 平台從 GitHub 部署您的前端應用程序。讓 DigitalOcean 專注於擴展您的應用程式。

核心語法

要使用 SSH 連接到遠程系統,我們將使用 ssh 命令。

如果您使用的是Windows,您需要安装OpenSSH的一个版本,以便能够从终端执行ssh。如果您更喜欢使用PowerShell,您可以按照Microsoft的文档来将OpenSSH添加到PowerShell中。如果您希望有一个完整的Linux环境可用,您可以设置WSL,即Windows子系统用于Linux,默认将包括ssh。最后,作为一个轻量级的第三个选择,您可以安装Git for Windows,它提供了一个包含ssh命令的本机Windows bash终端环境。这些选项都得到了很好的支持,您决定使用哪个将取决于个人偏好。

如果您使用的是Mac或Linux,您的终端中已经有了ssh命令。

命令的最简单形式如下:

  1. ssh remote_host

在这个例子中,remote_host是您要连接的IP地址或域名。

此命令假设您在远程系统上的用户名与您本地系统上的用户名相同。

如果您在远程系统上的用户名不同,您可以使用以下语法指定:

  1. ssh remote_username@remote_host

连接到服务器后,可能会要求您通过提供密码来验证身份。稍后,我们将介绍如何生成密钥以替代密码。

要退出 SSH 会话并返回本地 shell 会话,请键入:

  1. exit

SSH 是如何工作的?

SSH 通过将客户端程序连接到名为 sshdssh 服务器来运行。

在之前的部分中,ssh 是客户端程序。我们指定的 ssh 服务器 已经在 remote_host 上运行。

在几乎所有的 Linux 环境中,sshd 服务器应该会自动启动。如果由于任何原因没有运行,您可能需要通过基于 Web 的控制台或本地串行控制台临时访问服务器。

启动 ssh 服务器所需的过程取决于您使用的 Linux 发行版。

在 Ubuntu 上,您可以键入以下命令来启动 ssh 服务器:

  1. sudo systemctl start ssh

这应该会启动 sshd 服务器,然后您可以远程登录。

如何配置 SSH

当您更改 SSH 的配置时,您正在更改 sshd 服务器的设置。

在 Ubuntu 中,主要的 sshd 配置文件位于 /etc/ssh/sshd_config

在编辑之前备份此文件的当前版本:

  1. sudo cp /etc/ssh/sshd_config{,.bak}

nano 或您喜歡的文本編輯器打開它:

  1. sudo nano /etc/ssh/sshd_config

您會想保留此文件中的大多數選項不變。但是,有幾個選項您可能想要查看:

/etc/ssh/sshd_config
Port 22

端口聲明指定了sshd服務器將侦听連接的端口。默認情況下,這是 22。除非您有具體原因要進行更改,否則您應該保持此設置不變。如果您確實更改了端口,我們將在稍後向您展示如何連接到新端口。

/etc/ssh/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key

主機密鑰聲明指定了全局主機密鑰的查找位置。稍後我們將討論主機密鑰是什麼。

/etc/ssh/sshd_config
SyslogFacility AUTH
LogLevel INFO

這兩個項目指示應該發生的日誌級別。

如果您在SSH方面遇到困難,增加日誌的量可能是發現問題所在的好方法。

/etc/ssh/sshd_config
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes

這些參數指定了一些登錄信息。

LoginGraceTime 指定了在成功登錄之前保持連接活動的秒數。

將此時間設置為比您正常登錄所需的時間稍微長一點可能是一個好主意。

PermitRootLogin 選擇是否允許 root 用戶登錄。

在大多數情況下,當您創建了一個具有通過 susudo 獲得提升特權並且可以通過ssh登錄的用戶帳戶時,應將此更改為 no,以最小化任何人獲得root訪問權限的風險。

strictModes 是一個安全保護機制,如果身份驗證文件對所有人都可讀取,將拒絕登錄嘗試。

這可以防止在配置文件不安全時的登錄嘗試。

/etc/ssh/sshd_config
X11Forwarding yes
X11DisplayOffset 10

這些參數配置了一個名為 X11 Forwarding 的功能。這允許您在本地系統上查看遠程系統的圖形用戶界面(GUI)。

此選項必須在服務器上啟用,並在使用 SSH 客戶端連接時使用 -X 選項。

在進行更改後,保存並關閉文件。如果您正在使用 nano,請按 Ctrl+X,然後在提示時輸入 Y,然後按 Enter 鍵。

如果您在 /etc/ssh/sshd_config 中更改了任何設置,請確保重新加載您的 sshd 服務器以實施您的修改:

  1. sudo systemctl reload ssh

您應該仔細測試您的更改,以確保它們按您期望的方式運行。

在進行更改時,同時打開幾個終端會話可能是個好主意。這將使您能夠在必要時恢復配置,而不會被鎖定出系統。

如何使用密鑰登錄 SSH

儘管使用密碼登錄到遠程系統很有用,但使用 基於密鑰的身份驗證 更快速且更安全。

密鑰驗證是如何工作的?

密鑰驗證是通過創建一對密鑰來實現的:一個 私鑰 和一個 公鑰

私鑰 位於客戶端機器上,並且被安全地保管和保密。

公鑰 可以提供給任何人或放置在您希望訪問的任何服務器上。

當您嘗試使用密鑰對進行連接時,服務器將使用公鑰為客戶端計算一條僅能使用私鑰讀取的消息。

然後,客戶端將適當的響應發送回服務器,服務器將知道客戶端是合法的。

此過程在配置密鑰後自動執行。

如何創建 SSH 密鑰

SSH 密鑰應該在您希望從中登錄的計算機上生成。這通常是您的本地計算機。

輸入以下命令到命令行中:

  1. ssh-keygen -t rsa

你可能會被提示在金鑰文件本身上設置密碼,但這是一個相當不常見的做法,你應該通過按下回車鍵接受默認值。你的金鑰將被創建在〜/.ssh/id_rsa.pub〜/.ssh/id_rsa

通過輸入以下命令進入.ssh目錄:

  1. cd ~/.ssh

查看文件的權限:

  1. ls -l
Output
-rw-r--r-- 1 demo demo 807 Sep 9 22:15 authorized_keys -rw------- 1 demo demo 1679 Sep 9 23:13 id_rsa -rw-r--r-- 1 demo demo 396 Sep 9 23:13 id_rsa.pub

如您所見,id_rsa文件僅對所有者可讀和可寫。這有助於保密。

然而,id_rsa.pub文件可以共享並且具有適合此活動的權限。

如何將您的公共密鑰傳送到服務器

如果您目前通過基於密碼的訪問登錄到服務器,您可以通過發出以下命令將您的公共密鑰複製到它:

  1. ssh-copy-id remote_host

這將開始一個SSH會話。在您輸入密碼後,它將您的公共密鑰複製到服務器的授權金鑰文件中,這將允許您下次無需密碼登錄。

客戶端選項

通過SSH連接時,您可以提供一些可選標誌。

有些設置可能需要與遠程主機的sshd配置相匹配。

例如,如果您在sshd配置中更改了端口號,則需要在客戶端上匹配該端口,方法是輸入:

  1. ssh -p port_number remote_host

注意:更改ssh端口是提供安全性通過匿名性的一種合理方式。如果您允許ssh連接到一個廣為人知的服務器部署,並且端口22正常,並且啟用了密碼驗證,那麼您可能會受到許多自動登錄嘗試的攻擊。專門使用基於密鑰的身份驗證並在非標準端口上運行ssh並不是您可以採用的最複雜的安全解決方案,但應該可以將這些攻擊減少到最低。

如果您只想在遠程系統上執行一個命令,可以在主機後指定它,如下所示:

  1. ssh remote_host command_to_run

您將連接到遠程計算機,進行身份驗證,並且命令將被執行。

正如我們之前所說的,如果在兩台計算機上啟用了X11轉發,則可以通過輸入以下內容來訪問該功能:

  1. ssh -X remote_host

只要您的計算機上有適當的工具,您在遠程系統上使用的GUI程序現在將在本地系統上打開它們的窗口。

禁用密碼驗證

如果您已经创建了SSH密钥,您可以通过禁用仅密码身份验证来增强服务器的安全性。除了控制台之外,登录到您的服务器的唯一方法将是通过与您在服务器上安装的公钥配对的私钥。

警告:在继续执行此步骤之前,请确保您已将公钥安装到服务器上。否则,您将被锁定!

作为root或具有sudo权限的用户,打开sshd配置文件:

  1. sudo nano /etc/ssh/sshd_config

找到包含Password Authentication的行,并通过移除前面的#来取消注释。然后,您可以将其值更改为no

/etc/ssh/sshd_config
PasswordAuthentication no

另外两个不需要修改的设置(假设您之前未修改过此文件)是PubkeyAuthenticationChallengeResponseAuthentication。它们默认已设置,应该如下所示:

/etc/ssh/sshd_config
PubkeyAuthentication yes
ChallengeResponseAuthentication no

进行更改后,保存并关闭文件。

现在您可以重新加载SSH守护程序:

  1. sudo systemctl reload ssh

密码身份验证现在应该已禁用,并且您的服务器应该只能通过SSH密钥身份验证访问。

结论

學習如何使用SSH將極大地有益於您未來的雲計算事業。隨著您使用各種選項,您將發現更多可以讓您生活更輕鬆的高級功能。SSH一直保持受歡迎,因為它安全、輕量級且在各種情況下都很有用。

接下來,您可能想要了解有關使用SFTP進行命令行文件傳輸的相關資訊。

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ssh-to-connect-to-a-remote-server