介绍
作为系统管理员必须掌握的一个重要工具是 SSH。
SSH 或Secure Shell是一种用于安全登录远程系统的协议。这是访问远程 Linux 服务器的最常见方式。
在本指南中,我们将讨论如何使用 SSH 连接到远程系统。
基本语法
要使用 SSH 连接到远程系统,我们将使用该ssh
命令。命令的最基本形式是:
- ssh remote_host
在remote_host
本例中为您试图连接到IP地址或域名。
此命令假定您在远程系统上的用户名与您在本地系统上的用户名相同。
如果您在远程系统上的用户名不同,您可以使用以下语法指定它:
- ssh remote_username@remote_host
连接到服务器后,系统可能会要求您通过提供密码来验证您的身份。稍后,我们将介绍如何生成用于代替密码的密钥。
要退出 ssh 会话并返回到本地 shell 会话,请键入:
- exit
SSH 是如何工作的?
SSH的工作原理是客户端程序连接到SSH服务器,称为sshd
。
在上一节中,ssh
是客户端程序。在SSH服务器上已经运行remote_host
我们指定的。
在您的服务器上,sshd
服务器应该已经在运行。如果不是这种情况,您可能需要通过基于 Web 的控制台或本地串行控制台访问您的服务器。
启动 ssh 服务器所需的过程取决于您使用的 Linux 发行版。
在 Ubuntu 上,您可以通过键入以下内容来启动 ssh 服务器:
- sudo systemctl start ssh
这应该会启动 sshd 服务器,然后您可以远程登录。
如何配置 SSH
当您更改 SSH 的配置时,您正在更改 sshd 服务器的设置。
在 Ubuntu 中,主要的 sshd 配置文件位于/etc/ssh/sshd_config
.
在编辑之前备份此文件的当前版本:
- sudo cp /etc/ssh/sshd_config{,.bak}
用文本编辑器打开它:
- sudo nano /etc/ssh/sshd_config
您将希望单独保留此文件中的大部分选项。但是,您可能需要查看一些内容:
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用户登录。
在大多数情况下,这应该更改为no
当您创建了一个可以访问提升权限(通过su
或sudo
)并且可以通过 ssh 登录的用户帐户时。
strictModes
是一种安全防护,如果每个人都可以读取身份验证文件,它将拒绝登录尝试。
当配置文件不安全时,这可以防止登录尝试。
X11Forwarding yes
X11DisplayOffset 10
这些参数配置称为X11 Forwarding的能力。这允许您在本地系统上查看远程系统的图形用户界面 (GUI)。
必须在服务器上启用此选项,并在与该-X
选项连接期间与 SSH 客户端一起提供。
进行更改后,通过键入CTRL+X
和保存并关闭文件Y
,然后键入ENTER
。
如果您更改了 中的任何设置/etc/ssh/sshd_config
,请确保重新加载 sshd 服务器以实施您的修改:
- sudo systemctl reload ssh
您应该彻底测试您的更改以确保它们以您期望的方式运行。
在进行更改时,最好有几个会话处于活动状态。这将允许您在必要时恢复配置。
如何使用密钥登录 SSH
虽然能够使用密码登录远程系统很有帮助,但设置基于密钥的身份验证是一个更好的主意。
基于密钥的身份验证如何工作?
基于密钥的身份验证通过创建一对密钥来工作:私钥和公钥。
该私钥位于客户机上,并固定和保密。
该公钥可以给任何人或放置您要访问的任何服务器上。
当您尝试使用密钥对进行连接时,服务器将使用公钥为客户端计算机创建只能使用私钥读取的消息。
然后客户端计算机将适当的响应发送回服务器,服务器将知道客户端是合法的。
设置密钥后,整个过程会自动完成。
如何创建 SSH 密钥
SSH密钥必须要登录的计算机上生成的。这通常是您的本地机器。
在命令行中输入以下内容:
- ssh-keygen -t rsa
按 Enter 接受默认值。您的密钥将在~/.ssh/id_rsa.pub和~/.ssh/id_rsa 中创建。
.ssh
通过键入以下内容切换到目录:
- cd ~/.ssh
查看文件的权限:
- 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
但是,该文件可以共享并且具有适合此活动的权限。
如何将您的公钥传输到服务器
如果您当前对服务器具有基于密码的访问权限,则可以通过发出以下命令将您的公钥复制到它:
- ssh-copy-id remote_host
这将启动 SSH 会话。输入密码后,它会将您的公钥复制到服务器的授权密钥文件中,这样您下次无需密码即可登录。
客户端选项
通过 SSH 连接时,您可以选择许多可选标志。
其中一些可能是匹配远程主机sshd
配置中的设置所必需的。
例如,如果您更改了sshd
配置中的端口号,则需要通过键入以下内容在客户端匹配该端口:
- ssh -p port_number remote_host
如果您只想在远程系统上执行单个命令,您可以在主机后指定它,如下所示:
- ssh remote_host command_to_run
您将连接到远程机器,进行身份验证,然后将执行命令。
正如我们之前所说,如果在两台计算机上都启用了 X11 转发,您可以通过键入以下内容来访问该功能:
- ssh -X remote_host
如果您的计算机上有适当的工具,您在远程系统上使用的 GUI 程序现在将在您的本地系统上打开它们的窗口。
禁用密码验证
如果您已创建 SSH 密钥,则可以通过禁用仅密码身份验证来增强服务器的安全性。除了控制台之外,登录服务器的唯一方法是通过与您安装在服务器上的公钥配对的私钥。
警告:在继续执行此步骤之前,请确保您已为服务器安装了公钥。否则,您将被锁定!
以root或具有 sudo 权限的用户身份打开sshd
配置文件:
- sudo nano /etc/ssh/sshd_config
找到读取的行Password Authentication
,并通过删除前导#
. 然后,您可以将其值更改为no
:
PasswordAuthentication no
另外两个不需要修改的设置(前提是您之前没有修改过这个文件)是PubkeyAuthentication
和ChallengeResponseAuthentication
。它们是默认设置的,应如下所示:
PubkeyAuthentication yes
ChallengeResponseAuthentication no
进行更改后,保存并关闭文件。
您现在可以重新加载 SSH 守护进程:
- sudo systemctl reload ssh
现在应该禁用密码身份验证,并且您的服务器应该只能通过 SSH 密钥身份验证访问。
结论
学习 SSH 的方法是一项值得的追求,即使仅仅是因为它是如此常见的活动。
当您使用各种选项时,您会发现更高级的功能,这些功能可以让您的生活更轻松。SSH 一直很受欢迎,因为它安全、轻量且在各种情况下都很有用。