练习 27:安全 Shell,ssh,sshd,scp

原文:Exercise 27. Networking: secure shell, ssh, sshd, scp

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

你可能已经知道,SSH 是一种网络协议,允许你通过网络登录到vm1。让我们详细研究一下。

安全 Shell(SSH)是一种网络协议,用于安全数据通信,远程 Shell 服务或命令执行,以及其它两个联网计算机之间的网络服务,它们通过不安全网络上的安全通道连接:服务器和客户端(运行 SSH 服务器和 SSH 客户端程序)。协议规范区分了两个主要版本,被称为 SSH-1 和 SSH-2。

协议最著名的应用是,访问类 Unix 操作系统上的 shell 帐户。它为替代 Telnet 和其他不安全的远程 shell 协议而设计,如 Berkeley rsh 和 rexec 协议,它们以明文形式发送信息,特别是密码,使得它们易于使用封包分析来拦截和暴露。SSH 使用的加密 旨在通过不安全的网络(如互联网)提供数据的机密性和完整性。

重要的 SSH 程序,概念和配置文件:

  • OpenSSH - 开源的 ssh 程序实现。

  • ssh - 允许你连接到 SSH 服务器的客户端程序。Putty 就是这样的客户端程序。

  • sshd - 服务器程序,允许你使用ssh连接到它。

  • /etc/ssh/ssh_config - 默认的客户端程序配置文件。

  • /etc/ssh/sshd_config - 默认服务器程序配置文件。

  • 公钥密码系统 - 一种需要两个单独密钥的加密系统,其中一个密钥是私钥,其中一个密钥是公钥。虽然不同,密钥对的两个部分在数学上是相关的。一旦密钥锁定或加密了明文,另一个密钥解锁或解密密文。两个密钥都不能执行这两个功能。其中一个密钥是公开发布的,另一个密钥是保密的。

  • SSH 密钥 - SSH 使用公钥密码系统来认证远程计算机,并允许它对用户进行认证(如有必要)。任何人都可以生成一对匹配的不同密钥(公钥和私钥)。公钥放置在所有计算机上,它们允许访问匹配的私钥的所有者(所有者使私钥保密)。虽然认证基于私钥,但认证期间密钥本身不会通过网络传输。

  • /etc/ssh/moduli - 质数及其生成器,由sshd(8)用于 Diffie-Hellman Group Exchange 密钥交换方法中。

  • /etc/ssh/ssh_host_dsa_key, /etc/ssh/ssh_host_rsa_key - 主机 RSA 和 DSA 私钥。

  • /etc/ssh/ssh_host_dsa_key.pub, /etc/ssh/ssh_host_rsa_key.pub - 主机 RSA 和 DSA 公钥。

SSH 协议非常重要,因此被广泛使用,并且具有如此多的功能,你必须了解它的一些工作原理。这是它的一些用途:

  • scp - 通过 SSH 传输文件。

  • sftp - 类似 ftp 的协议,用于管理远程文件。

  • sshfs - SSH 上的远程文件系统。

  • SSH 隧道 - 一种通过安全连接,传输几乎任何数据的方法。这是非常重要的,因为它可以用于构建受保护系统的基础,以及许多其他用途。

为了了解这个协议,让我们看看,在 SSH 会话中会发生了什么。为此,我们将开始研究vm1vm1的连接的带注解的输出(是的,这是可以做到的,也是完全有效的)。概述:

现在阅读这个:

并研究 SSH 会话的真实输出:

现在,你将学习如何在调试模式下启动sshd,使用scp建立公钥认证和复制文件。

这样做

你会看到什么

解释

  1. 创建/home/user1/ssh_test目录。

  2. 使其成为当前工作目录。

  3. sshd_config复制到此目录。

  4. sshd监听端口从 22 更改为 1024,将副本命名为sshd_config.bak

  5. 替换 RSA 主机密钥位置。

  6. 替换 DSA 主机密钥位置。

  7. 显示sshd_config的旧版本和新版本之间的差异。

  8. 生成具有空密码的,新的 4096 位 RSA 主机密钥对,将其保存到/home/user1/ssh_test/ssh_host_rsa_key/home/user1/ssh_test/ssh_host_rsa_key.pub

  9. 同样的,但是对 DSA 密钥执行。

  10. 生成新的认证密钥对,将其保存到/home/user1/.ssh/id_rsa/home/user1/.ssh/id_rsa.pub

  11. id_rsa.pub复制到/home/user1/.ssh/authorized_keys,来允许无密码认证。

  12. 在调试模式下,在端口 1024 上启动新的 SSH 服务器,将所有输出保存到sshd.log

  13. 提取 SSH 客户端的主机认证密钥,并将其提供给/home/user1/.ssh/known_hosts

  14. 在调试模式下,在端口 1024 上启动新的 SSH 服务器,将所有输出附加到sshd.log。这是因为在调试模式下, SSH 服务器只维护一个连接。

  15. 使用ssh客户端连接到此服务器。

  16. 以树形式打印当前正在运行的进程。你可以看到,你正在使用sshd启动的 bash,它服务于你的连接,而sshd又是由sshd启动,你在几行之前启动了你自己。。

  17. 退出ssh会话。

  18. 再次启动 SSH 服务器。

  19. 将文件.bashrc从你的主目录复制到当前目录。

附加题

观看此视频,它解释了加密如何工作:http://www.youtube.com/watch?v=3QnD2c4Xovk 阅读:http://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch03_04.htm 阅读文件ssh.outscp.outsshd.out中的调试输出。向你自己解释发生了什么。

Last updated