介绍
作为系统管理员必须掌握的一个重要工具是SSH。
SSH,或称为安全外壳协议,是用于安全登录远程系统的协议。这是访问远程Linux服务器的最常见方式。
在本指南中,我们将讨论如何使用SSH连接到远程系统。
使用DigitalOcean 应用平台从 GitHub 部署您的前端应用程序。让 DigitalOcean 关注您应用的扩展。
核心语法
要使用SSH连接到远程系统,我们将使用ssh
命令。
如果您使用的是Windows,您需要安装OpenSSH的一个版本才能够从终端进行ssh连接。如果您更喜欢使用PowerShell,您可以按照微软的文档来添加OpenSSH到PowerShell。如果您宁愿拥有一个完整的Linux环境,您可以设置WSL,即Windows子系统Linux,它会默认包含ssh。最后,作为一个轻量级的第三个选项,您可以安装Git for Windows,它提供了一个包含ssh命令的本机Windows bash终端环境。这些选项都得到了良好的支持,您可以根据个人喜好来决定使用哪个。
如果您使用的是Mac或Linux,您的终端已经自带了ssh命令。
该命令的最简单形式是:
在这个例子中,remote_host
是您要连接到的IP地址或域名。
该命令假设您在远程系统上的用户名与您本地系统上的用户名相同。
如果您在远程系统上的用户名不同,您可以使用以下语法来指定它:
连接到服务器后,您可能需要提供密码来验证您的身份。稍后,我们将介绍如何生成密钥以代替密码。
要退出SSH会话并返回到本地shell会话,请键入:
SSH如何工作?
SSH通过将客户端程序连接到名为sshd
的ssh服务器来工作。
在前面的部分中,ssh
是客户端程序。ssh服务器已经在我们指定的remote_host
上运行。
在几乎所有Linux环境中,sshd
服务器应该会自动启动。如果由于任何原因它没有运行,则可能需要通过基于Web的控制台或本地串行控制台临时访问您的服务器。
启动ssh服务器所需的过程取决于您使用的Linux发行版。
在Ubuntu上,您可以键入以下命令来启动ssh服务器:
这应该会启动sshd服务器,然后您可以远程登录。
如何配置SSH
当您更改SSH的配置时,您正在更改sshd服务器的设置。
在Ubuntu中,主要的sshd配置文件位于/etc/ssh/sshd_config
。
在编辑之前备份此文件的当前版本:
使用 nano
或你喜欢的文本编辑器打开它:
大多数情况下,你会希望保持这个文件的大部分选项不变。然而,有一些选项你可能需要关注:
Port 22
端口声明指定了sshd服务器监听连接的端口。默认情况下,这是 22
。除非你有特定的理由,否则你应该保持这个设置不变。如果你确实改变了端口,我们会在后面告诉你如何连接到新端口。
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
主机密钥声明指定了全局主机密钥的位置。稍后我们会讨论主机密钥是什么。
SyslogFacility AUTH
LogLevel INFO
这两个项目指示了应该发生的日志记录级别。
如果你在使用SSH时遇到困难,增加日志记录量可能是发现问题所在的好方法。
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
这些参数指定了一些登录信息。
LoginGraceTime
指定了在成功登录之前保持连接活动的秒数。
可能是一个好主意将这个时间设置得略高于你正常登录所需的时间。
PermitRootLogin
选择是否允许 root 用户登录。
在大多数情况下,当你创建了一个具有通过 su
或 sudo
访问提升权限并可以通过SSH登录的用户账户时,应该将其更改为 no
,以最小化任何人获取服务器 root 访问权限的风险。
strictModes
是一个安全保护,如果认证文件对所有人都可读,将拒绝登录尝试。
这可以防止配置文件不安全时的登录尝试。
X11Forwarding yes
X11DisplayOffset 10
这些参数配置了一个叫做 X11 转发 的功能。这允许你在本地系统上查看远程系统的图形用户界面(GUI)。
这个选项必须在服务器上启用,并在使用 SSH 客户端连接时使用 -X
选项。
完成更改后,保存并关闭文件。如果你使用 nano
,按下 Ctrl+X
,然后在提示时按 Y
,然后按 Enter。
如果你更改了 /etc/ssh/sshd_config
中的任何设置,请确保重新加载 sshd 服务器以实现修改:
你应该彻底测试你的更改,以确保它们按照你的预期工作。
当你进行更改时,同时保持几个终端会话可能是一个好主意。这样可以让你在必要时还原配置而不会被锁出。
如何使用密钥登录 SSH
虽然使用密码登录远程系统很方便,但设置基于 密钥的认证 更快速更安全。
密钥身份验证是如何工作的?
密钥身份验证通过创建一对密钥来实现:一个私钥和一个公钥。
私钥位于客户端计算机上,并且被安全地保密。
公钥可以提供给任何人,或者放置在您希望访问的任何服务器上。
当您尝试使用密钥对进行连接时,服务器将使用公钥为客户端计算机创建一条只能用私钥读取的消息。
然后,客户端计算机将适当的响应发送回服务器,服务器将知道客户端是合法的。
此过程在配置密钥后自动执行。
如何创建 SSH 密钥
SSH 密钥应该在您希望从中登录的计算机上生成。通常这是您的本地计算机。
在命令行中输入以下内容:
您可能会被要求在密钥文件本身上设置密码,但这是一种相当不常见的做法,您应该按回车键接受默认设置。您的密钥将被创建在~/.ssh/id_rsa.pub和~/.ssh/id_rsa。
通过键入以下命令来切换到.ssh
目录:
查看文件的权限:
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
文件可以共享,并且具有适合此活动的权限。
如何将您的公钥传输到服务器
如果您目前通过密码访问服务器,您可以通过发出此命令将您的公钥复制到服务器:
这将启动一个SSH会话。在您输入密码后,它将把您的公钥复制到服务器的授权密钥文件中,这将允许您下次登录时无需密码。
客户端选项
连接时,您可以提供许多可选标志。
有些可能需要与远程主机的sshd
配置匹配。
例如,如果您在sshd
配置中更改了端口号,则需要在客户端上匹配该端口,方法是键入:
注意:更改ssh端口是通过“安全性通过混淆”提供安全性的合理方法。如果您允许ssh连接到一个广为人知的服务器部署在标准的22端口上,并且启用了密码认证,您可能会受到许多自动登录尝试的攻击。专门使用基于密钥的身份验证并在非标准端口上运行ssh并非您可以采用的最复杂的安全解决方案,但应该能将这些攻击降至最低。
如果您只想在远程系统上执行单个命令,您可以在主机后指定它,如下所示:
您将连接到远程计算机,进行身份验证,然后执行命令。
如前所述,如果两台计算机都启用了X11转发,您可以通过键入以下内容访问该功能:
只要您在计算机上具有适当的工具,您在远程系统上使用的GUI程序现在将在本地系统上打开其窗口。
禁用密码认证
如果您已创建SSH密钥,可以通过禁用仅密码身份验证来增强服务器的安全性。除了控制台,登录服务器的唯一方法是通过与您在服务器上安装的公钥配对的私钥。
警告:在继续此步骤之前,请确保您已将公钥安装到服务器上。否则,您将被锁定!
作为root或具有sudo特权的用户,打开sshd
配置文件:
找到以下行:Password Authentication
,通过删除前导的#
来取消注释。然后将其值更改为no
:
PasswordAuthentication no
另外两个不需要修改的设置(前提是您之前未修改过此文件)分别是PubkeyAuthentication
和ChallengeResponseAuthentication
。它们默认设置为如下所示:
PubkeyAuthentication yes
ChallengeResponseAuthentication no
进行更改后,保存并关闭文件。
现在可以重新加载SSH守护程序:
密码身份验证现在应已禁用,并且您的服务器应仅通过SSH密钥身份验证可访问。
结论
学习如何使用SSH将极大地有利于您未来的云计算探索。当您使用各种选项时,您将发现更多能够让您生活更轻松的高级功能。SSH因其安全、轻量级以及在各种情况下的实用性而保持了其流行。
Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ssh-to-connect-to-a-remote-server