在基于Ubuntu和Debian的发行版上安装和配置OpenSSH
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的联机帮助页。