在基于Ubuntu和Debian的发行版上安装和配置OpenSSH

时间:2020-03-05 15:26:37  来源:igfitidea点击:

SSH(安全shell的缩写)是一种协议,它允许从一台计算机安全地远程登录到另一台计算机。

现在的问题是,如何在Ubuntu或者Debian或者我们使用的任何其他Linux发行版上启用SSH?

请记住,SSH只是一个协议,可以通过许多工具(例如lsh,Dropbear等)来实现此协议,但是SSH使用最广泛的工具是开源软件OpenSSH。

在本教程中,我们将了解如何安装OpenSSH并将其配置为在基于Ubuntu和Debian的Linux发行版上启用SSH。

使用OpenSSH在Ubuntu和Debian上启用SSH

如前所述,OpenSSH是用于进行SSH登录的软件。

它在端口上侦听并验证传入的用户,并为远程用户创建一个新的shell。

为了使SSH正常运行,需要在用户需要登录的远程系统上运行ssh服务器。
我们还需要在本地系统中拥有一个ssh客户端,用户可以从该客户端登录到远程系统。

OpenSSH提供这两种功能。
最终用户有openssh-client,远程服务器有openssh-server。

在安装OpenSSH之前,应检查SSH是否已安装并在系统上运行。

检查SSH是否已启用并正在运行

系统中很有可能已启用SSH。
要进行验证,请在远程服务器或者最终用户系统上运行以下命令:

ps -aux | grep ssh

如果启用了SSH,我们应该在桌面上看到有关SSH代理的信息:

ps -aux | grep ssh
igi  1736  0.0  0.0  11304    36 ?        Ss   08:18   0:00 /usr/bin/ssh-agent /usr/bin/im-launch env GNOME_SHELL_SESSION_MODE=ubuntu gnome-session --session=ubuntu
igi 10462  0.0  0.0  21536  1044 pts/0    S+   10:15   0:00 grep --color=auto ssh

在服务器上,我们应该看到有关正在运行的SSH守护程序的信息:

ps -aux | grep ssh
root       920  0.0  0.2  72296  6028 ?        Ss    2015   0:17 /usr/sbin/sshd -D
root     22708  0.0  0.3 108172  7364 ?        Ss   05:13   0:00 sshd: Hyman@theitroad/0
root     22873  0.0  0.0  14856  1068 pts/0    S+   05:14   0:00 grep --color=auto ssh

如果没有看到与上述类似的输出,则说明系统上没有运行SSH。
现在该安装OpenSSH了。

在Ubuntu和Debian上安装OpenSSH

在继续安装OpenSSH之前,有关openssh-client和openssh-server的快速说明。

openssh-client:如果要使用SSH连接到远程Linux系统,则这是我们需要的软件包。
这是最终用户/桌面用户所需要的。

openssh-server:如果要允许通过SSH远程登录到系统,这是我们需要的软件包。
这就是我们在Linux服务器上所需要的。

请注意,安装openssh-server还可以使我们通过SSH远程登录到其他系统。
换句话说,openssh-server由openssh-client组成。
但是,如果我们只是Linux桌面的最终用户,则(大多数)无需安装openssh-server并允许远程登录到系统。

现在我们已经知道了两者之间的区别,是时候来看看如何安装它们了。

请注意,要在Ubuntu或者Debian上安装OpenSSH,我们需要具有sudo/root权限。
如果我们没有此类权限,请与系统管理员联系。
我们还可以阅读有关创建sudo用户的本文。

为桌面或者最终用户安装OpenSSH

如果只想通过SSH连接到其他远程系统,则应使用以下命令安装openssh-client软件包:

sudo apt update
sudo apt install openssh-client

为服务器安装OpenSSH

如果要设置Ubuntu/Debian服务器,则应安装openssh-server软件包,以便其他远程用户可以连接到系统。

sudo apt update
sudo apt install openssh-server

安装openssh-server之后,就该学习如何对其进行调整并根据需要进行配置。

控制SSH守护程序sshd(用于服务器)

我们将安装名为sshd的SSH守护程序,并默认情况下启用该功能以在重新启动时自动启动。
systemctl是控制SSH守护程序的几种方法之一。
要了解有关systemctl的更多信息,请参考本文。

启动sshd服务

只需发出以下命令即可启动该服务:

sudo systemctl start sshd

停止sshd服务

可以通过类似的方式停止该服务:

sudo systemctl stop sshd

重新启动sshd服务

如果要停止和启动sshd服务(在将配置更改为sshd服务的情况下通常需要这样做),只需使用以下命令即可:

sudo systemctl restart sshd

每次启动时自动在Ubuntu上启用SSH

一些服务需要在重新启动自身时启动,以避免手动交互以及使用频率很高的情况。
对于服务器中的Apache,mongod,mysqld,sshd之类的服务,这非常重要。

如果要为sshd启用这种自动启动,请使用:

sudo systemctl enable sshd

重新启动时禁用SSH自动启动

如果我们不希望sshd在重新启动时自动启动,请使用

sudo systemctl disable sshd

上面提到的四个技巧在我们每次更改ssh服务(例如更改端口)时都是必需的。
我们可以利用上述命令来管理任何服务名称为sshd的服务(例如mysqld,mongod,apache),并将其替换为目标服务。

提示:即使SSH连接断开,我们也可以使用nohup命令来保持正在运行的命令。

配置SSH(用于服务器)

截至目前,我们的ssh服务将在端口22上进行侦听,并准备在存储密钥后对任何用户(也是root)进行身份验证。

如果要更改任何配置(例如端口以侦听连接),则可以通过添加,删除,注释或者取消注释行来编辑文件“/etc/ssh/sshd_config”,然后重新启动sshd服务。

有许多配置选项。
我创建了最可能需要的配置列表。

1.更改默认的SSH端口

通常,sshd服务侦听TCP端口22.
如果要将其更改为其他端口,例如5678,则在/etc/ssh/ssh_config中添加/编辑以下行。

Port 5678

重新启动服务以立即查看更改。

2.禁用通过SSH的root登录

由于安全原因,允许root用户通过ssh进行身份验证不是一个好主意。
sudo用户可以远程登录,但不能以root用户身份登录,因为root用户位于安全性食物链的顶部。

可以通过添加(如果尚不存在)以下行并重新启动服务来禁用“根登录”。

PermitRootLogin no

如果该行已存在,请确保未将其注释掉。

3.允许基于SSH密钥的身份验证

我们可能希望允许基于ssh密钥的身份验证,以便最终用户不必一直输入密码。

仅使用ssh Hyman @ theitroad就足以登录到远程系统。

为此,我们应该配置SSH以允许公钥身份验证:

PubkeyAuthentication yes

如果该行已存在,请确保未将其注释掉。

现在,如果要允许特定系统通过公用密钥登录,则需要在文件.ssh/authorized_keys中添加最终用户的公用密钥。

我们可以在ssh-keygen的帮助下制作ssh密钥(公用密钥和专用密钥)。
要了解有关密钥生成的更多信息,请参考此强大的资源。

我们可以通过任意方式将最终用户的公钥转移到远程服务器。
如果愿意,可以使用scp命令,也可以直接通过FTP获得。

完全取决于我们。

以上三个是最需要的,但是如果要进一步更改,请参考sshd_config的联机帮助页。