SSH远程访问:从基础到高级应用
立即解锁
发布时间: 2025-09-11 01:35:50 阅读量: 2 订阅数: 22 AIGC 

### SSH远程访问:从基础到高级应用
#### 1. 启动SSH服务器
在网络环境中,SSH(Secure Shell)服务器是实现远程访问和安全通信的重要工具。我们已经在StudentVM1上启动了SSH服务器,现在需要在StudentVM2上也启动它。任何Linux主机都可以作为SSH服务器,这样做有助于实现便捷的通信以及在远程主机上进行工作。
**实验45 - 1:在StudentVM2上启动SSHD**
以root用户身份在StudentVM2上开始这个实验。启动SSHD服务器守护进程并设置其在开机时自动启动。默认的SSHD配置完全能满足我们的需求,并且允许root用户直接登录。不过在实际环境中,为了安全起见,我们可能会禁止root用户直接登录。
```bash
[root@studentvm2 ~]# systemctl start sshd ; systemctl enable sshd
Created symlink /etc/systemd/system/multi-user.target.wants/sshd.service →
/usr/lib/systemd/system/sshd.service.
[root@studentvm2 ~]#
```
现在,StudentVM2主机已经准备好接受SSH连接了。在StudentVM1上以student用户身份打开一个终端会话,尝试SSH连接到StudentVM2:
```bash
[student@studentvm1 ~]$ ssh studentvm2
The authenticity of host 'studentvm2 (192.168.56.1)' can't be established.
ECDSA key fingerprint is SHA256:NDM/B5L3eRJaalex6IOUdnJsE1sm0SiQNWgaI8BwcVs.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'studentvm2,192.168.56.1' (ECDSA) to the list of
known hosts.
Password: <Enter the password for student1 on StudentVM2>
[student@studentvm2 ~]$
```
当首次与任何主机建立SSH连接时,会显示真实性消息以及远程主机私钥的指纹。在安全要求较高的环境中,我们应该提前获取远程主机的密钥指纹,以便进行比对,确保连接到正确的远程主机。需要注意的是,这不是安全密钥,而是该主机私钥的唯一指纹,无法通过它重建原始私钥,从而防止被用于破解远程主机。
接下来,查看`/home/student/.ssh`目录以及StudentVM1上`~/.ssh/known_hosts`文件的内容。你会看到远程主机StudentVM2的公共主机密钥。这个文件是在本地主机(即我们发起连接的主机)上创建的,而不是在远程主机上。每次连接的主机在`known_hosts`文件中都有唯一的签名,用于后续连接时识别:
```bash
[student@studentvm1 ~]$ cat .ssh/known_hosts
localhost ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBL0J/wd2RJpsu2fPK0EPzFq6dCnT-
Fk3/m3U716SD2BY
studentvm2 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFm+TnU+D2+O0iGkcgp47LvEN9ZQ3
yKU8l2nuAMeXI6D
studentvm2 ssh-rsa
<SNIP>
uKMVvVC3DliZZ+GEkXd2U4vsmDht0fXH1RcnPJPBM9xPP32dhfg9Zwprwra1VJxa9icecmZbglvJj
0RUgvvFp/PHZxHFVkGWKZ7ywoojFTOeFjR0xc=
studentvm2 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNT
YAAABBBPOZ9+hEe2P3P5475c3hS45C73w52eoN/9R/dk0724/qYZ9dzNSB6yl+jH35BTIRGtzbqhn
oaKTBqCTBLAQdG/c=
[student@studentvm1 ~]$
```
首次连接远程主机并接受密钥后,后续连接的初始化速度会稍快一些,因为两台计算机现在可以通过密钥相互识别。主机密钥与SSH客户端和服务器配置文件一起存储在`/etc/ssh`目录中。可以列出该目录的内容以查看各种密钥文件。
最后,以root用户身份在StudentVM1上连接到StudentVM2并验证连接是否正常。使用`exit`命令断开两台虚拟机之间的所有SSH连接。
#### 2. SSH工作原理简述
SSH连接在主机之间建立时,会经历以下一系列事件:
```mermaid
graph LR
A[在StudentVM1上输入ssh studentvm2命令] --> B[本地主机建立到远程主机的未加密TCP连接]
B --> C[远程主机向本地主机发送自己的公钥,本地主机将其与~/.ssh/known_hosts中的公钥进行比对,验证远程主机身份]
C --> D[两台主机协商加密算法并启动,后续通信通过加密通道进行]
D --> E[本地主机提示用户输入密码,并通过加密通道将其发送到远程服务器]
E --> F[远程服务器验证密码正确后,允许登录]
F --> G[远程主机启动用户的默认shell(通常是Bash)]
```
如果在`ssh`命令中未以`user@host`格式指定用户,SSH会默认使用发起命令的用户ID作为要连接到远程主机的用户ID。除了使用密码,还可以使用公钥/私钥对(PPKP)进行身份验证,后续会详细介绍。PPKP还可以使用任意长度的可选密码短语,以提供更高的安全性。
SSH可以在单个经过身份验证的连接上复用多个并发通道,支持登录会话的隧道传输和TCP转发,使得像X Window System这样通常不加密的协议也能使用这个加密通道。
如今,SSH通常使用OpenSSH实现。直到2000年9月,SSH一直受到专利和其他专有限制,但这些限制在当时已经全部过期。虽然仍然有商业版本的SSH可用,但在Linux上没有必要使用它们。Fedora和其他一些发行版默认安装SSH客户端和服务器,并允许root用户访问。
#### 3. 公钥/私钥对
公钥/私钥对(PPKP)主要用于增强安全性,减少在发起SSH连接到远程主机时对密码的依赖。对于用户来说,这更安全,因为无需记忆和记录复杂的密码。
每个主机在安装后首次启动时都会生成一个PPKP,这些密钥对存储在`/etc/ssh`目录中。在首次SSH连接的初始握手协议中,会交换主机的公钥。这些主机密钥用于相互确认主机身份,并启动连接的初始加密,确保认证序列的安全性。
PPKP的工作原理如下:
1. 创建公钥/私钥对。
2. 将公钥发送到远程计算机,该计算机将解密我们发送的消息并加密回复消息。
3. 使用私钥加密消息并发送到远程计算机。
4. 远程计算机使用公钥解密加密消息。
5. 为了回复,远程计算机使用我们主机的公钥加密消息并发送给我们。
0
0
复制全文
相关推荐









