介绍
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服务器:
sudosystemctl start ssh
复制
那应该启动sshd服务器,然后您可以远程登录。
如何配置SSH
更改SSH的配置时,将更改sshd服务器的设置。
在Ubuntu中,主sshd配置文件位于 /etc/ssh/sshd_config 。
编辑之前,请备份此文件的当前版本:
sudo cp /etc/ssh/sshd_config{,.bak}
复制
用文本编辑器打开它:
sudonano /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 用户登录。
在大多数情况下,应将其更改为 no 创建具有访问权限(通过 su 或 sudo )并可以通过ssh登录 的用户帐户时 。
strictModes 是一个安全防护员,如果每个人都可以读取身份验证文件,它将拒绝登录尝试。
当配置文件不安全时,这可以防止尝试登录。
/ etc / ssh / sshd_config
X11Forwarding yes
X11DisplayOffset 10
复制
这些参数配置了称为 X11转发的功能 。 这使您可以在本地系统上查看远程系统的图形用户界面(GUI)。
必须在服务器上启用此选项,并在与该 -X 选项 连接期间将其与SSH客户端一起 提供。
进行更改后,通过键入 CTRL+X 和 Y ,然后按 来保存并关闭文件 ENTER 。
如果您在中更改了任何设置 /etc/ssh/sshd_config ,请确保您重新加载sshd服务器以实现您的修改:
sudosystemctl 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密钥,则可以通过禁用仅密码身份验证来增强服务器的安全性。 除控制台外,登录服务器的唯一方法是通过与服务器上已安装的公钥配对的私钥。
**警告:**在继续此步骤之前,请确保已为服务器安装了公共密钥。否则,您将被锁定!
作为 根 或用户与须藤权限,打开 sshd 配置文件:
sudonano /etc/ssh/sshd_config
复制
找到读取的行 Password Authentication ,并通过删除开头取消注释 # 。 然后,您可以将其值更改为 no :
/ etc / ssh / sshd_config
PasswordAuthentication no
复制
不应该需要修改两个设置(前提是你没有修改之前本文件)是 PubkeyAuthentication 和 ChallengeResponseAuthentication 。 它们是默认设置的,应如下所示:
/ etc / ssh / sshd_config
PubkeyAuthentication yes
ChallengeResponseAuthentication no
复制
进行更改后,保存并关闭文件。
现在,您可以重新加载SSH守护程序:
sudosystemctl reload ssh
复制
现在应该禁用密码身份验证,并且只能通过SSH密钥身份验证来访问服务器。
结论
学习SSH的方法是值得的,即使仅仅是因为这是一种常见的活动。
使用各种选项时,您会发现更多高级功能,可以使您的生活更轻松。 SSH一直很受欢迎,因为它安全,轻便并且在各种情况下都有用。