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

介绍

作为系统管理员掌握的一个必不可少的工具是SSH。

SSH 或 Secure Shell 是用于安全登录远程系统的协议,是访问远程 Linux 服务器的最常见方式。

在本指南中,我们将讨论如何使用SSH连接到远程系统。

核心语法

要使用SSH连接到远程系统,我们将使用ssh命令。

如果你正在使用Windows,你需要安装一个版本的OpenSSH,以便能够从终端ssh。如果你更喜欢在PowerShell工作,你可以遵循 微软的文档将OpenSSH添加到PowerShell。如果你更愿意有一个完整的Linux环境可用,你可以 设置WSL,为Linux的Windows子系统,其中将包含ssh默认。最后,作为一个轻量级的第三种选项,你可以安装Git for Windows(https://gitforwindows.org/),其中提供一个原始的Windowsbash终端环境,其中包括ssh命令。

如果您使用的是 Mac 或 Linux,则已在您的终端中使用ssh命令。

命令的最简单的形式是:

1ssh remote_host

此示例中的remote_host是您试图连接的 IP 地址或域名。

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

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

1ssh remote_username@remote_host

一旦您已连接到服务器,您可能会被要求通过提供密码来验证您的身份。

要退出 ssh 会话并返回本地壳会话,键入:

1exit

SSH是如何工作的?

SSH通过将客户端程序连接到一个 ssh服务器,称为sshd

在上一节中,‘ssh’是客户端程序. ssh server 已经在我们指定的‘remote_host’上运行。

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

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

在Ubuntu中,您可以通过键入下列方式启动 ssh 服务器:

1sudo systemctl start ssh

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

如何配置SSH

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

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

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

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

使用nano或您最喜欢的文本编辑器打开它:

1sudo nano /etc/ssh/sshd_config

您将想要单独留下这个文件中的大多数选项,但您可能需要看看一些:

1[label /etc/ssh/sshd_config]
2Port 22

端口声明指定了 sshd 服务器将听到哪个端口进行连接. 默认情况下,这是22。 您可能应该单独留下此设置,除非您有其他具体理由。

1[label /etc/ssh/sshd_config]
2HostKey /etc/ssh/ssh_host_rsa_key
3HostKey /etc/ssh/ssh_host_dsa_key
4HostKey /etc/ssh/ssh_host_ecdsa_key

主机密钥声明指定在哪里寻找全球主机密钥. 我们将在以后讨论主机密钥是什么。

1[label /etc/ssh/sshd_config]
2SyslogFacility AUTH
3LogLevel INFO

这两个元素表明应该发生的伐木水平。

如果您在 SSH 中遇到困难,增加日志的数量可能是一个很好的方法来发现问题是什么。

1[label /etc/ssh/sshd_config]
2LoginGraceTime 120
3PermitRootLogin yes
4StrictModes yes

这些参数指定了一些登录信息。

LoginGraceTime指定了保持连接无需成功登录的秒数。

这可能是一个好主意,将这个时间设置为比正常登录所需的时间稍高一些。

‘PermitRootLogin’ 选择是否允许 root 用户登录。

在大多数情况下,当您创建了一个用户帐户时,应该更改为,该帐户可以访问高级权限(通过susudo)并可以通过 ssh 登录,以最大限度地减少任何人获得 root 访问您的服务器的风险。

strictModes是一个安全保护程序,如果所有人都可以读取身份验证文件,它会拒绝登录。

这可以防止登录尝试,如果配置文件不安全。

1[label /etc/ssh/sshd_config]
2X11Forwarding yes
3X11DisplayOffset 10

这些参数配置了一个名为 X11 Forwarding 的功能,允许您在本地系统上查看远程系统的图形用户界面(GUI)。

此选项必须在服务器上启用,并在连接-X选项时与 SSH 客户端提供。

更改后,保存并关闭文件. 如果您正在使用nano,请按Ctrl+X,然后在提示时,请按Y,然后输入。

如果您在 /etc/ssh/sshd_config 中更改了任何设置,请确保您重新加载 sshd 服务器以实现更改:

1sudo systemctl reload ssh

您应该仔细测试您的更改,以确保它们以您预期的方式运作。

当你进行更改时,打开几个终端会话可能是一个好主意,这将允许你在必要时重置配置,而无需锁定自己。

如何使用密钥登录到SSH

虽然能够使用密码登录远程系统是有帮助的,但设置基于密钥的身份验证更快、更安全。

基于密钥的身份验证是如何工作的?

基于密钥的身份验证通过创建一对密钥:私钥和公共密钥。

private key 位於客戶端機器上,保密並保密。

公共密钥可以给任何人或放置在您想要访问的任何服务器上。

当您尝试使用密钥对连接时,服务器将使用公共密钥为客户端计算机创建一个只能使用私钥读取的消息。

然后客户端计算机将相应的响应发送回服务器,服务器将知道客户端是合法的。

此过程在您配置密钥后自动执行。

如何创建SSH密钥

SSH键应该在您想要登录的计算机上生成,这通常是您的本地计算机。

在命令行中输入以下内容:

1ssh-keygen -t rsa

您可能会被要求在关键文件本身设置密码,但这是一个相当不常见的做法,您应该通过提示按入来接受默认值。

转到.ssh 目录,键入:

1cd ~/.ssh

看看这些文件的权限:

1ls -l
1[secondary_label Output]
2-rw-r--r-- 1 demo demo 807 Sep 9 22:15 authorized_keys
3-rw------- 1 demo demo 1679 Sep 9 23:13 id_rsa
4-rw-r--r-- 1 demo demo 396 Sep 9 23:13 id_rsa.pub

正如你所看到的,id_rsa 文件只能被所有者读取和写入,这有助于保密。

但是,id_rsa.pub 文件可以共享,并且具有适用于此活动的权限。

如何将您的公共密钥转移到服务器

如果您目前有基于密码的访问服务器,您可以通过发出此命令来复制您的公共密钥:

1ssh-copy-id remote_host

在您输入密码后,它将将您的公共密钥复制到服务器的授权密钥文件,这将允许您下次无密码登录。

客户端选项

有许多可选的旗帜,您可以在通过SSH连接时提供。

其中一些可能需要匹配远程主机的sshd配置中的设置。

例如,如果您在sshd配置中更改了端口号码,则需要通过键入:

1ssh -p port_number remote_host

<$>[注] 注: 更改您的 ssh 端口是通过 obscurity 提供 _security 的合理方法. 如果您正常允许 SSH 连接到已知的服务器部署在端口 22 上,并且您已启用了密码身份验证,那么您可能会受到许多自动登录尝试的攻击。

如果您只想在远程系统上执行单个命令,则可以在主机之后指定该命令:

1ssh remote_host command_to_run

您将连接到远程机器,验证,并执行命令。

如前所述,如果在两台计算机上启用了 X11 转发,则可以通过键入:

1ssh -X remote_host

假设您在计算机上有相应的工具,您在远程系统上使用的GUI程序现在将在本地系统上打开窗口。

禁用密码身份验证

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

<$>[警告] 警告: 在您继续执行此步骤之前,请确保您已在您的服务器上安装了公共密钥。

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

1sudo nano /etc/ssh/sshd_config

查找读到密码身份验证的行,并通过删除#删除评论,然后将其值更改为:

1[label /etc/ssh/sshd_config]
2PasswordAuthentication no

另外两个不需要修改的设置(前提是您没有更改此文件)是PubkeyAuthenticationChallengeResponseAuthentication

1[label /etc/ssh/sshd_config]
2PubkeyAuthentication yes
3ChallengeResponseAuthentication no

完成更改后,保存并关闭文件。

您现在可以重新加载 SSH Daemon:

1sudo systemctl reload ssh

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

结论

学习SSH将大大有利于你未来的任何云计算努力。当你使用各种选项时,你会发现更先进的功能,可以使你的生活更容易。

接下来,您可能想了解有关 与 SFTP 合作执行命令行文件转移的信息。

Published At
Categories with 技术
comments powered by Disqus