标签 SSH 下的文章

PuTTY 是一个自由开源且支持包括 SSH、Telnet 和 Rlogin 在内的多种协议的 GUI 客户端。一般来说,Windows 管理员们会把 PuTTY 当成 SSH 或 Telnet 客户端来在本地 Windows 系统和远程 Linux 服务器之间建立连接。不过,PuTTY 可不是 Windows 的独占软件。它在 Linux 用户之中也是很流行的。本篇文章将会告诉你如何在 Linux 中安装并使用 PuTTY。

在 Linux 中安装 PuTTY

PuTTY 已经包含在了许多 Linux 发行版的官方源中。举个例子,在 Arch Linux 中,我们可以通过这个命令安装 PuTTY:

$ sudo pacman -S putty

在 Debian、Ubuntu 或是 Linux Mint 中安装它:

$ sudo apt install putty

使用 PuTTY 访问远程 Linux 服务器

在安装完 PuTTY 之后,你可以在菜单或启动器中打开它。如果你想用终端打开它,也是可以的:

$ putty

PuTTY 的默认界面长这个样子:

PuTTY 默认界面

如你所见,许多选项都配上了说明。在左侧面板中,你可以配置许多项目,比如:

  1. 修改 PuTTY 登录会话选项;
  2. 修改终端模拟器控制选项,控制各个按键的功能;
  3. 控制终端响铃的声音;
  4. 启用/禁用终端的高级功能;
  5. 设定 PuTTY 窗口大小;
  6. 控制命令回滚长度(默认是 2000 行);
  7. 修改 PuTTY 窗口或光标的外观;
  8. 调整窗口边缘;
  9. 调整字体;
  10. 保存登录信息;
  11. 设置代理;
  12. 修改各协议的控制选项;
  13. 以及更多。

所有选项基本都有注释,相信你理解起来不难。

使用 PuTTY 访问远程 Linux 服务器

请在左侧面板点击 “Session” 选项卡,输入远程主机名(或 IP 地址)。然后,请选择连接类型(比如 Telnet、Rlogin 以及 SSH 等)。根据你选择的连接类型,PuTTY 会自动选择对应连接类型的默认端口号(比如 SSH 是 22、Telnet 是 23),如果你修改了默认端口号,别忘了手动把它输入到 “Port” 里。在这里,我用 SSH 连接到远程主机。在输入所有信息后,请点击 “Open”。

通过 SSH 连接

如果这是你首次连接到这个远程主机,PuTTY 会显示一个安全警告,问你是否信任你连接到的远程主机。点击 “Accept” 即可将远程主机的密钥加入 PuTTY 的缓存当中:

PuTTY 安全警告

接下来,输入远程主机的用户名和密码。然后你就成功地连接上远程主机啦。

已连接上远程主机

使用密钥验证访问远程主机

一些 Linux 管理员可能在服务器上配置了密钥认证。举个例子,在用 PuTTY 访问 AMS 实例的时候,你需要指定密钥文件的位置。PuTTY 可以使用它自己的格式(.ppk 文件)来进行公钥验证。

首先输入主机名或 IP。之后,在 “Category” 选项卡中,展开 “Connection”,再展开 “SSH”,然后选择 “Auth”,之后便可选择 .ppk 密钥文件了。

点击 “Accept” 来关闭安全提示。然后,输入远程主机的密码(如果密钥被密码保护)来建立连接。

保存 PuTTY 会话

有些时候,你可能需要多次连接到同一个远程主机,你可以保存这些会话并在之后不输入信息访问他们。

请输入主机名(或 IP 地址),并提供一个会话名称,然后点击 “Save”。如果你有密钥文件,请确保你在点击 “Save” 按钮之前指定它们。

现在,你可以通过选择 “Saved sessions”,然后点击 “Load”,再点击 “Open” 来启动连接。

使用 PuTTY 安全复制客户端(pscp)来将文件传输到远程主机中

通常来说,Linux 用户和管理员会使用 scp 这个命令行工具来从本地往远程主机传输文件。不过 PuTTY 给我们提供了一个叫做 PuTTY 安全复制客户端 PuTTY Secure Copy Client (简写为 pscp)的工具来干这个事情。如果你的本地主机运行的是 Windows,你可能需要这个工具。PSCP 在 Windows 和 Linux 下都是可用的。

使用这个命令来将 file.txt 从本地的 Arch Linux 拷贝到远程的 Ubuntu 上:

pscp -i test.ppk file.txt [email protected]:/home/sk/

让我们来分析这个命令:

  • -i test.ppk:访问远程主机所用的密钥文件;
  • file.txt:要拷贝到远程主机的文件;
  • [email protected]:远程主机的用户名与 IP;
  • /home/sk/:目标路径。

要拷贝一个目录,请使用 -r 递归 Recursive )参数:

 pscp -i test.ppk -r dir/ [email protected]:/home/sk/

要使用 pscp 传输文件,请执行以下命令:

pscp -i test.ppk c:\documents\file.txt.txt [email protected]:/home/sk/

你现在应该了解了 PuTTY 是什么,知道了如何安装它和如何使用它。同时,你也学习到了如何使用 pscp 程序在本地和远程主机上传输文件。

以上便是所有了,希望这篇文章对你有帮助。

干杯!


via: https://www.ostechnix.com/how-to-install-and-use-putty-on-linux/

作者:SK 选题:lujun9972 译者:zhs852 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如果我没弄错,Putty 可能是 Windows 最受欢迎的 SSH 客户端。

在 IT 公司中,开发环境通常在远程 Linux 系统上,而开发人员则使用 Windows 作为本地系统。Putty 用于从 Windows 机器连接到远程 Linux 系统。

Putty 不是限定于 Windows 的。你也可以在 Linux 和 macOS 上使用此开源软件。

但是等等!当你已经拥有“真正的” Linux 终端时,为什么要在 Linux 上使用单独的 SSH 客户端?这有几个想在 Linux 上使用 Putty 的原因。

  • 你在 Windows 上使用 Putty 已经很久了,你觉得它更舒服。
  • 你发现很难手动编辑 SSH 配置文件以保存各种 SSH 会话。你更喜欢 Putty 图形化保存 SSH 连接的方式。
  • 你想通过连接到原始套接字和串口进行调试。

无论是什么原因,如果你想在 Ubuntu 或任何其他 Linux 上使用 Putty,你当然可以这样做。让我告诉你如何做到。

在 Ubuntu Linux 上安装 Putty

Installing Putty on Linux

对于 Ubuntu 用户来说,好消息是 Putty 可以在 Ubuntu 的 universe 仓库中找到。

要在 Ubuntu上安装 Putty,首先应确保已启用 universe 仓库。

sudo add-apt-repository universe

启用 universe 仓库后,应使用以下命令更新 Ubuntu:

sudo apt update

之后,你可以使用以下命令安装 Putty:

sudo apt install putty

安装后,你可以在菜单中找到它来启动 Putty。

正如你在下面的截图中看到的,Putty 的 Linux 版本看起来与 Windows 版本相同。这让你松了一口气, 因为你不必再尝试新的设置。

Putty in Linux

当你输入远程系统的主机名或 IP 地址并连接到它时,Putty 将使用你已保存在主目录中的 SSH 密钥。

Using Putty in Ubuntu Linux

在其他 Linux 发行版上安装 Putty

Putty 可用于 Debian,所以你只需要使用 apt-getaptitude 来安装它。

sudo apt-get install putty

Putty 也适用于 Fedora/Red Hat,并可以使用默认的包管理器进行安装。

sudo dnf install putty

你还可以在基于 Arch Linux 的发行版中轻松安装 Putty。

sudo pacman -S putty

请记住,Putty 是一款开源软件。如果你真的想要,你也可以通过源代码安装它。你可以从下面的链接获取 Putty 的源代码。

我一直喜欢原生 Linux 终端而不是像 Putty 这样的 SSH 客户端。我觉得 GNOME 终端或 Terminator 更有家的感觉。但是,在 Linux 中使用默认终端或 Putty 是个人选择。

你在 Linux 上管理多个 SSH 连接时使用了什么?


via: https://itsfoss.com/putty-linux/

作者:Abhishek Prakash 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如何为你的 SSH 服务器安装三种不同的双因子身份验证方案。

如今,安全比以往更加重要,保护 SSH 服务器是作为系统管理员可以做的最为重要的事情之一。传统地,这意味着禁用密码身份验证而改用 SSH 密钥。无疑这是你首先应该做的,但这并不意味着 SSH 无法变得更加安全。

双因子身份验证就是指需要两种身份验证才能登录。可以是密码和 SSH 密钥,也可以是密钥和第三方服务,比如 Google。这意味着单个验证方法的泄露不会危及服务器。

以下指南是为 SSH 启用双因子验证的三种方式。

当你修改 SSH 配置时,总是要确保有一个连接到服务器的第二终端。第二终端意味着你可以修复你在 SSH 配置中犯的任何错误。打开的终端将一直保持,即便 SSH 服务重启。

SSH 密钥和密码

SSH 支持对登录要求不止一个身份验证方法。

/etc/sh/sshd_config 中的 SSH 服务器配置文件中的 AuthenticationMethods 选项中设置了身份验证方法。

当在 /etc/ssh/sshd_config 中添加下一行时,SSH 需要提交一个 SSH 密钥,然后提示输入密码:

AuthenticationMethods "publickey,password"

如果你想要根据使用情况设置这些方法,那么请使用以下附加配置:

Match User jsmith
    AuthenticationMethods "publickey,password"

当你已经编辑或保存了新的 sshd_config 文件,你应该通过运行以下程序来确保你没有犯任何错误:

sshd -t

任何导致 SSH 不能启动的语法或其他错误都将在这里标记出来。当 ssh-t 运行时没有错误,使用 systemctl 重新启动 SSH:

systemctl restart sshd

现在,你可以使用新终端登录,以核实你会被提示输入密码并需要 SSH 密钥。如果你用 ssh-v,例如:

ssh -v [email protected]

你将可以看到登录的每一步。

注意,如果你确实将密码设置成必需的身份验证方法,你要确保将 PasswordAuthentication 选项设置成 yes

使用 Google Authenticator 的 SSH

Google 在 Google 自己的产品上使用的双因子身份验证系统可以集成到你的 SSH 服务器中。如果你已经使用了Google Authenticator,那么此方法将非常方便。

虽然 libpam-google-authenticator 是由 Google 编写的,但它是开源的。此外,Google Authenticator 是由 Google 编写的,但并不需要 Google 帐户才能工作。多亏了 Sitaram Chamarty 的贡献。

如果你还没有在手机上安装和配置 Google Authenticator,请参阅 这里的说明。

首先,我们需要在服务器上安装 Google Authenticatior 安装包。以下命令将更新你的系统并安装所需的软件包:

apt-get update
apt-get upgrade
apt-get install libpam-google-authenticator

现在,我们需要在你的手机上使用 Google Authenticatior APP 注册服务器。这是通过首先运行我们刚刚安装的程序完成的:

google-authenticator

运行这个程序时,会问到几个问题。你应该以适合你的设置的方式回答,然而,最安全的选项是对每个问题回答 y。如果以后需要更改这些选项,您可以简单地重新运行 google-authenticator 并选择不同的选项。

当你运行 google-authenticator 时,一个二维码会被打印到终端上,有些代码看起来像这样:

Your new secret key is: VMFY27TYDFRDNKFY
Your verification code is 259652
Your emergency scratch codes are:
  96915246
  70222983
  31822707
  25181286
  28919992

你应该将所有这些代码记录到一个像密码管理器一样安全的位置。“scratch codes” 是单一的使用代码,即使你的手机不可用,它总是允许你访问。

要将服务器注册到 Authenticator APP 中,只需打开应用程序并点击右下角的红色加号即可。然后选择扫描条码选项,扫描打印到终端的二维码。你的服务器和应用程序现在连接。

回到服务器上,我们现在需要编辑用于 SSH 的 PAM (可插入身份验证模块),以便它使用我们刚刚安装的身份验证器安装包。PAM 是独立系统,负责 Linux 服务器上的大多数身份验证。

需要修改的 SSH PAM 文件位于 /etc/pam.d/sshd ,用以下命令编辑:

nano /etc/pam.d/sshd

在文件顶部添加以下行:

auth required pam_google_authenticator.so

此外,我们还需要注释掉一行,这样 PAM 就不会提示输入密码。改变这行:

# Standard Un*x authentication.
@include common-auth

为如下:

# Standard Un*x authentication.
# @include common-auth

接下来,我们需要编辑 SSH 服务器配置文件:


nano /etc/ssh/sshd\_config “`


改变这一行:


ChallengeResponseAuthentication no


为:


ChallengeResponseAuthentication yes


 接下来,添加以下代码行来启用两个身份验证方案:SSH 密钥和谷歌认证器(键盘交互):


AuthenticationMethods "publickey,keyboard-interactive"


 在重新加载 SSH 服务器之前,最好检查一下在配置中没有出现任何错误。执行以下命令:


sshd -t


如果没有标识出任何错误,用新的配置重载 SSH:


systemctl reload sshd.service


 现在一切都应该开始工作了。现在,当你登录到你的服务器时,你将需要使用 SSH 密钥,并且当你被提示输入:


Verification code:


打开 Authenticator APP 并输入为您的服务器显示的 6 位代码。


### Authy


[Authy](https://authy.com/) 是一个双重身份验证服务,与 Google 一样,它提供基于时间的代码。然而,Authy 不需要手机,因为它提供桌面和平板客户端。它们还支持离线身份验证,不需要 Google 帐户。


你需要从应用程序商店安装 Authy 应用程序,或 Authy [下载页面](https://authy.com/download/)所链接的桌面客户端。


安装完应用程序后,需要在服务器上使用 API 密钥。这个过程需要几个步骤:


1. 在[这里](https://www.authy.com/signup)注册一个账户。
2. 向下滚动到 “Authy” 部分。
3. 在帐户上启用双因子认证(2FA)。
4. 回 “Authy” 部分。
5. 为你的服务器创建一个新的应用程序。
6. 从新应用程序的 “General Settings” 页面顶部获取 API 密钥。你需要 “PRODUCTION API KEY”旁边的眼睛符号来显示密钥。如图:


![](/data/attachment/album/201811/06/204801eiomcb42ngo2w8cn.png)


在某个安全的地方记下 API 密钥。


现在,回到服务器,以 root 身份运行以下命令:


curl -O 'https://raw.githubusercontent.com/authy/authy-ssh/master/authy-ssh'
bash authy-ssh install /usr/local/bin


 当提示时输入 API 键。如果输入错误,你始终可以编辑 `/usr/local/bin/authy-ssh` 再添加一次。


Authy 现已安装。但是,在为用户启用它之前,它不会开始工作。启用 Authy 的命令有以下形式:


/usr/local/bin/authy-ssh enable


 root 登录的一些示例细节:


/usr/local/bin/authy-ssh enable root [email protected] 44 20822536476


 如果一切顺利,你会看到:


User was registered


现在可以通过运行以下命令来测试 Authy:


authy-ssh test


最后,重载 SSH 实现新的配置:


systemctl reload sshd.service


 Authy 现在正在工作,SSH 需要它才能登录。


现在,当你登录时,你将看到以下提示:


Authy Token (type 'sms' to request a SMS token):


 你可以输入手机或桌面客户端的 Authy APP 上的代码。或者你可以输入 `sms`, Authy 会给你发送一条带有登录码的短信。


可以通过运行以下命令卸载 Authy:


/usr/local/bin/authy-ssh uninstall




---


via: <https://bash-prompt.net/guides/ssh-2fa/>


作者:[Elliot Cooper](https://bash-prompt.net) 译者:[cielllll](https://github.com/cielllll) 校对:[wxy](https://github.com/wxy)

通过 SSH 和 SFTP 协议,我们能够访问其他设备,有效而且安全的传输文件等等。

几年前,我决定配置另外一台电脑,以便我能在工作时访问它来传输我所需要的文件。要做到这一点,最基本的一步是要求你的网络提供商(ISP)提供一个固定的地址。

有一个不必要但很重要的步骤,就是保证你的这个可以访问的系统是安全的。在我的这种情况下,我计划只在工作场所访问它,所以我能够限定访问的 IP 地址。即使如此,你依然要尽多的采用安全措施。一旦你建立起来这个系统,全世界的人们马上就能尝试访问你的系统。这是非常令人惊奇及恐慌的。你能通过日志文件来发现这一点。我推测有探测机器人在尽其所能的搜索那些没有安全措施的系统。

在我设置好系统不久后,我觉得这种访问没什么大用,为此,我将它关闭了以便不再为它操心。尽管如此,只要架设了它,在家庭网络中使用 SSH 和 SFTP 还是有点用的。

当然,有一个必备条件,这个另外的电脑必须已经开机了,至于电脑是否登录与否无所谓的。你也需要知道其 IP 地址。有两个方法能够知道,一个是通过浏览器访问你的路由器,一般情况下你的地址格式类似于 192.168.1.254 这样。通过一些搜索,很容易找出当前是开机的并且接在 eth0 或者 wifi 上的系统。如何识别你所要找到的电脑可能是个挑战。

更容易找到这个电脑的方式是,打开 shell,输入 :

ifconfig

命令会输出一些信息,你所需要的信息在 inet 后面,看起来和 192.168.1.234 类似。当你发现这个后,回到你要访问这台主机的客户端电脑,在命令行中输入 :

ssh [email protected]

如果要让上面的命令能够正常执行,gregp 必须是该主机系统中正确的用户名。你会被询问其密码。如果你键入的密码和用户名都是正确的,你将通过 shell 环境连接上了这台电脑。我坦诚,对于 SSH 我并不是经常使用的。我偶尔使用它,我能够运行 dnf 来更新我所常使用电脑之外的其它电脑。通常,我用 SFTP :

sftp [email protected]

我更需要用简单的方法来把一个文件传输到另一个电脑。相对于闪存棒和额外的设备,它更加方便,耗时更少。

一旦连接建立成功,SFTP 有两个基本的命令,get,从主机接收文件 ;put,向主机发送文件。在连接之前,我经常在客户端移动到我想接收或者传输的文件夹下。在连接之后,你将处于一个顶层目录里,比如 home/gregp。一旦连接成功,你可以像在客户端一样的使用 cd,改变你在主机上的工作路径。你也许需要用 ls 来确认你的位置。

如果你想改变你的客户端的工作目录。用 lcd 命令( 即 local change directory 的意思)。同样的,用 lls 来显示客户端工作目录的内容。

如果主机上没有你想要的目录名,你该怎么办?用 mkdir 在主机上创建一个新的目录。或者你可以将整个目录的文件全拷贝到主机 :

put -r thisDir/

这将在主机上创建该目录并复制它的全部文件和子目录到主机上。这种传输是非常快速的,能达到硬件的上限。不像在互联网传输一样遇到网络瓶颈。要查看你能在 SFTP 会话中能够使用的命令列表:

man sftp

我也能够在我的电脑上的 Windows 虚拟机内用 SFTP,这是配置一个虚拟机而不是一个双系统的另外一个优势。这让我能够在系统的 Linux 部分移入或者移出文件。而我只需要在 Windows 中使用一个客户端就行。

你能够使用 SSH 或 SFTP 访问通过网线或者 WIFI 连接到你路由器的任何设备。这里,我使用了一个叫做 SSHDroid 的应用,能够在被动模式下运行 SSH。换句话来说,你能够用你的电脑访问作为主机的 Android 设备。近来我还发现了另外一个应用,Admin Hands,不管你的客户端是平板还是手机,都能使用 SSH 或者 SFTP 操作。这个应用对于备份和手机分享照片是极好的。


via: https://opensource.com/article/18/10/ssh-sftp-home-network

作者:Geg Pittman 选题:lujun9972 译者:singledo 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

什么是基于 SSH 密钥的认证?

众所周知,Secure Shell,又称 SSH,是允许你通过无安全网络(例如 Internet)和远程系统之间安全访问/通信的加密网络协议。无论何时使用 SSH 在无安全网络上发送数据,它都会在源系统上自动地被加密,并且在目的系统上解密。SSH 提供了四种加密方式,基于密码认证基于密钥认证基于主机认证键盘认证。最常用的认证方式是基于密码认证和基于密钥认证。

在基于密码认证中,你需要的仅仅是远程系统上用户的密码。如果你知道远程用户的密码,你可以使用 ssh user@remote-system-name 访问各自的系统。另一方面,在基于密钥认证中,为了通过 SSH 通信,你需要生成 SSH 密钥对,并且为远程系统上传 SSH 公钥。每个 SSH 密钥对由私钥与公钥组成。私钥应该保存在客户系统上,公钥应该上传给远程系统。你不应该将私钥透露给任何人。希望你已经对 SSH 和它的认证方式有了基本的概念。

这篇教程,我们将讨论如何在 Linux 上配置基于密钥认证的 SSH。

在 Linux 上配置基于密钥认证的 SSH

为方便演示,我将使用 Arch Linux 为本地系统,Ubuntu 18.04 LTS 为远程系统。

本地系统详情:

  • OS: Arch Linux Desktop
  • IP address: 192.168.225.37/24

远程系统详情:

  • OS: Ubuntu 18.04 LTS Server
  • IP address: 192.168.225.22/24

本地系统配置

就像我之前所说,在基于密钥认证的方法中,想要通过 SSH 访问远程系统,需要将公钥上传到远程系统。公钥通常会被保存在远程系统的一个 ~/.ssh/authorized_keys 文件中。

注意事项:不要使用 root 用户生成密钥对,这样只有 root 用户才可以使用。使用普通用户创建密钥对。

现在,让我们在本地系统上创建一个 SSH 密钥对。只需要在客户端系统上运行下面的命令。

$ ssh-keygen

上面的命令将会创建一个 2048 位的 RSA 密钥对。你需要输入两次密码。更重要的是,记住你的密码。后面将会用到它。

样例输出

Generating public/private rsa key pair.
Enter file in which to save the key (/home/sk/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sk/.ssh/id_rsa.
Your public key has been saved in /home/sk/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:wYOgvdkBgMFydTMCUI3qZaUxvjs+p2287Tn4uaZ5KyE [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|+=+*= + |
|o.o=.* = |
|.oo * o + |
|. = + . o |
|. o + . S |
| . E . |
| + o |
| +.*o+o |
| .o*=OO+ |
+----[SHA256]-----+

如果你已经创建了密钥对,你将看到以下信息。输入 y 就会覆盖已存在的密钥。

/home/username/.ssh/id_rsa already exists.
Overwrite (y/n)?

请注意密码是可选的。如果你输入了密码,那么每次通过 SSH 访问远程系统时都要求输入密码,除非你使用了 SSH 代理保存了密码。如果你不想要密码(虽然不安全),简单地敲两次回车。不过,我建议你使用密码。从安全的角度来看,使用无密码的 ssh 密钥对不是什么好主意。这种方式应该限定在特殊的情况下使用,例如,没有用户介入的服务访问远程系统。(例如,用 rsync 远程备份……)

如果你已经在个人文件 ~/.ssh/id_rsa 中有了无密码的密钥,但想要更新为带密码的密钥。使用下面的命令:

$ ssh-keygen -p -f ~/.ssh/id_rsa

样例输出

Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.

现在,我们已经在本地系统上创建了密钥对。接下来,使用下面的命令将 SSH 公钥拷贝到你的远程 SSH 服务端上。

$ ssh-copy-id [email protected]

在这里,我把本地(Arch Linux)系统上的公钥拷贝到了远程系统(Ubuntu 18.04 LTS)上。从技术上讲,上面的命令会把本地系统 ~/.ssh/id_rsa.pub 文件中的内容拷贝到远程系统 ~/.ssh/authorized_keys 中。明白了吗?非常棒。

输入 yes 来继续连接你的远程 SSH 服务端。接着,输入远程系统用户 sk 的密码。

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

如果你已经拷贝了密钥,但想要替换为新的密码,使用 -f 选项覆盖已有的密钥。

$ ssh-copy-id -f [email protected]

我们现在已经成功地将本地系统的 SSH 公钥添加进了远程系统。现在,让我们在远程系统上完全禁用掉基于密码认证的方式。因为我们已经配置了密钥认证,因此不再需要密码认证了。

在远程系统上禁用基于密码认证的 SSH

你需要在 root 用户或者 sudo 执行下面的命令。

禁用基于密码的认证,你需要在远程系统的终端里编辑 /etc/ssh/sshd_config 配置文件:

$ sudo vi /etc/ssh/sshd_config

找到下面这一行,去掉注释然后将值设为 no

PasswordAuthentication no

重启 ssh 服务让它生效。

$ sudo systemctl restart sshd

从本地系统访问远程系统

在本地系统上使用命令 SSH 你的远程服务端:

$ ssh [email protected]

输入密码。

样例输出

Enter passphrase for key '/home/sk/.ssh/id_rsa':
Last login: Mon Jul 9 09:59:51 2018 from 192.168.225.37
sk@ubuntuserver:~$

现在,你就能 SSH 你的远程系统了。如你所见,我们已经使用之前 ssh-keygen 创建的密码登录进了远程系统的账户,而不是使用当前账户实际的密码。

如果你试图从其它客户端系统 ssh(远程系统),你将会得到这条错误信息。比如,我试图通过命令从 CentOS SSH 访问 Ubuntu 系统:

样例输出

The authenticity of host '192.168.225.22 (192.168.225.22)' can't be established.
ECDSA key fingerprint is 67:fc:69:b7:d4:4d:fd:6e:38:44:a8:2f:08:ed:f4:21.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.225.22' (ECDSA) to the list of known hosts.
Permission denied (publickey).

如你所见,除了 CentOS(LCTT 译注:根据上文,这里应该是 Arch)系统外,我不能通过其它任何系统 SSH 访问我的远程系统 Ubuntu 18.04。

为 SSH 服务端添加更多客户端系统的密钥

这点非常重要。就像我说过的那样,除非你配置过(在之前的例子中,是 Ubuntu),否则你不能通过 SSH 访问到远程系统。如果我希望给更多客户端予以权限去访问远程 SSH 服务端,我应该怎么做?很简单。你需要在所有的客户端系统上生成 SSH 密钥对并且手动拷贝 ssh 公钥到想要通过 ssh 访问的远程服务端上。

在客户端系统上创建 SSH 密钥对,运行:

$ ssh-keygen

输入两次密码。现在,ssh 密钥对已经生成了。你需要手动把公钥(不是私钥)拷贝到远程服务端上。

使用以下命令查看公钥:

$ cat ~/.ssh/id_rsa.pub

应该会输出类似下面的信息:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCt3a9tIeK5rPx9p74/KjEVXa6/OODyRp0QLS/sLp8W6iTxFL+UgALZlupVNgFjvRR5luJ9dLHWwc+d4umavAWz708e6Na9ftEPQtC28rTFsHwmyLKvLkzcGkC5+A0NdbiDZLaK3K3wgq1jzYYKT5k+IaNS6vtrx5LDObcPNPEBDt4vTixQ7GZHrDUUk5586IKeFfwMCWguHveTN7ykmo2EyL2rV7TmYq+eY2ZqqcsoK0fzXMK7iifGXVmuqTkAmZLGZK8a3bPb6VZd7KFum3Ezbu4BXZGp7FVhnOMgau2kYeOH/ItKPzpCAn+dg3NAAziCCxnII9b4nSSGz3mMY4Y7 ostechnix@centosserver

拷贝所有内容(通过 USB 驱动器或者其它任何介质),然后去你的远程服务端的终端,像下面那样,在 $HOME 下创建文件夹叫做 .ssh。你需要以 root 身份执行命令(注:不一定需要 root)。

$ mkdir -p ~/.ssh

现在,将前几步创建的客户端系统的公钥添加进文件中。

echo {Your_public_key_contents_here} >> ~/.ssh/authorized_keys

在远程系统上重启 ssh 服务。现在,你可以在新的客户端上 SSH 远程服务端了。

如果觉得手动添加 ssh 公钥有些困难,在远程系统上暂时性启用密码认证,使用 ssh-copy-id 命令从本地系统上拷贝密钥,最后禁用密码认证。

推荐阅读:

好了,到此为止。基于密钥认证的 SSH 提供了一层防止暴力破解的额外保护。如你所见,配置密钥认证一点也不困难。这是一个非常好的方法让你的 Linux 服务端安全可靠。

不久我会带来另一篇有用的文章。请继续关注 OSTechNix。

干杯!


via: https://www.ostechnix.com/configure-ssh-key-based-authentication-linux/

作者:SK 选题:lujun9972 译者:LuuMing 校对:pityonline

本文由 LCTT 原创编译,Linux中国 荣誉推出

所有人都知道 SSH 是一种远程登录工具,然而它也有许多其他用途。

创建一个 SOCKS 代理来浏览网页(也就是翻墙啦):

ssh -D <port> <remote_host>

设置 localhost:<port> 作为你浏览器的代理

连接一个堡垒机后的 Windows RDP 主机:

ssh -L <port>:<target_host>:3389 <bastion_server> 

让你的 RDP 客户端连接到 localhost:<port>

在不使用 VNC 端口的情况下,连接远程 VNC 主机:

ssh -L 5901:localhost:5901 <remote_host> 

让你的 VNC 客户端连接到 localhost:5901

按照这个思路,你可以映射任意端口:LDAP (389)、631 (CUPS)、8080 (替代的 HTTP),等等。

产生一个新的 SSH 密钥对:

ssh-keygen

更新密钥对的密码:

ssh-keygen -p

把公钥复制到远程主机上:

ssh-copy-id -i <identity file> <remote_host>

SSH 有一堆命令行选项,但是如果有一些是你经常使用的,你可以为它们在 SSH 配置文件 (${HOME}/.ssh/config) 里创建一个入口。比如:

host myhouse 
    User itsme 
    HostName house.example.com

那么你就可以输入 ssh myhouse 来代替 ssh [email protected]

以下是常用的命令行选项和他们的配置文件写法。一些是常用的简化写法。请查看 ssh(1)ssh_config(5) 的手册页来获取详尽信息。

命令行配置文件描述
-l <login name>User <login name>远程主机的登录用户名。
-i <identity file>IdentityFile <identity file>指定要使用的鉴权文件(SSH 密码对)。
-p <remote port>Port <remote port>远程 SSH 守护进程监听的端口号。 (默认为 22)
-CCompression <yes,no>压缩往来信息。 (默认为 no)
-D <port>DynamicForward <port>把本地端口的报文转发到远程主机。
-XForwardX11 <yes,no>把 X11 的图像数据转发到远程主机的端口. (默认为 no)
-AForwardAgent <yes,no>把授权代理的报文转发给远程主机。如果你使用第三方主机登录,这个功能将很有用。 (默认为 no)
-4(仅使用 IPv4) -6 (仅使用 IPv6)AddressFamily <any,inet4,inet6>指定仅使用 IPv4 或者 IPv6。
-L <local port>:<target host>:<target port>LocalForward <local port>:<target host>:<target port>把本地主机指定端口的报文转发到远程主机的某个端口。

opensource.com Twitter @opensourceway | facebook.com/opensourceway | IRC: #opensource.com on Freenode


作者简介:

Ben Cotton 是业余的气象学家和职业的高性能计算工程师。Ben 是微软 Azure 的产品营销经理,专注于高性能计算。他是一个 Fedora 用户和贡献者,共同创立了一个当地的开放源码群,并且是开源促进会的成员和保护自由软件的支持者。通过以下方式联系他 Twitter (@FunnelFiasco) 或者 FunnelFiasco.com.


via: https://opensource.com/sites/default/files/gated-content/cheat_sheet_ssh_v03.pdf

作者:BEN COTTON 译者:kennethXia 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出