如何在Ubuntu中使用SSH连接到远程服务器

SSH是用于管理远程Linux和类Unix计算机的重要工具。在本指南中,我们将讨论此实用程序的基本用法以及如何配置SSH环境。

什么是SSH?

作为系统管理员的一个重要工具是SSH。

SSH或Secure Shell,是用来安全地登录到远程系统的协议。 它是访问远程Linux和类Unix服务器的最常见方法。

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

基本语法

用于连接到使用SSH远程系统在Linux的工具称为,勿庸置疑,SSH。

命令的最基本形式是:

ssh remote_host

在这个例子中远程主机是,你正在试图连接到IP地址或域名。

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

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

ssh remote_username@remote_host

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

稍后,我们将介绍如何生成密钥以代替密码。

要退出回本地会话,只需键入:

exit

SSH如何工作?

SSH的工作原理是客户端程序连接到SSH服务器

在上面的命令,SSH是客户端程序。 SSH服务器上我们指定的远程主机已经在运行。

在您的Droplet中,sshd服务器应该已在运行。 如果不是这种情况下,单击您的Droplet网页控制台访问按钮:

数字海洋控制台按钮

您将看到一个登录屏幕。 使用您的凭据登录。

启动ssh服务器所需的进程取决于您使用的Linux的分布。

在Ubuntu上,您可以通过键入以下命令在Droplet上启动ssh服务器:

sudo service ssh start

在Ubuntu 16.04和Debian杰西,你可以使用systemctlsystemd管理服务的命令:

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

您将希望单独留下此文件中的大多数选项。 但是,有几个你可能想看看:

/ 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根是否可以登录。

在大多数情况下,当您创建了可以访问提升权限(通过su或sudo)的用户帐户并且可以通过ssh登录时,这应该更改为“no”。

strictModes是一种安全防范,将拒绝登录尝试如果认证文件可以被任何人读取。

这防止配置文件不安全时的登录尝试。

/ etc / ssh / sshd_config
X11Forwarding yes
X11DisplayOffset 10

这些参数配置名为X11转发的能力。 这允许您在本地系统上查看远程系统的图形用户界面(GUI)。

此选项必须在服务器上启用,并在连接期间SSH客户端给出-X选项。


如果您在更改任何设置/etc/ssh/sshd_config ,请确保您重新启动sshd服务来实现您的修改:

sudo service ssh restart

或者,在systemd系统如Ubuntu 16.04或Debian的杰西:

sudo systemctl restart ssh

您应该彻底测试您的更改,以确保它们以您期望的方式运行。

在进行更改时,有几个会话可能是一个好主意。 这将允许您在必要时还原配置。

如果你遇到问题,请记住,您可以通过飞沫页面上的链接控制台登录。

如何使用密钥登录SSH

虽然这是有帮助的,能够登录到使用密码远程系统,这是一个更好的主意来建立基于密钥的认证

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

基于密钥的认证的工作原理是创造一个对密钥: 私钥公钥

私钥位于客户机上,并固定和保密。

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

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

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

在设置密钥后,整个过程将在后台自动完成。

如何创建SSH密钥

SSH密钥,你应该想登录到计算机上生成。 这通常是您的本地计算机。

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

ssh-keygen -t rsa

按Enter键接受默认值。 您的钥匙将在的〜/ .ssh / id_rsa.pub的〜/ .ssh / id_rsa创建。

换入.ssh通过键入目录:

cd ~/.ssh

查看文件的权限:

ls -l
-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是一个值得追求,如果只因为它是这样一个共同的活动。

当你利用各种选项,你会发现更高级的功能,可以使你的生活更轻松。 SSH仍然流行,因为它是安全,轻量级,并在各种情况下有用。