window 和虚拟机ubuntu通讯的网络设置 本地连接桥接和NAT

工作需要,最近在linux下开发,需要将windows里的文件传至虚拟机里以及下位机树莓派中,三者需要实现互传。

windows连接树莓派时是采用网口建立本地连接的,而当不需要连接树莓派时,windows和虚拟机不能通过有线本地连接传输。

两种传输模式的切换让我设置IP和网络的时候老是困惑。在一种形式下可以传输,在另一种情况下又出现连不上的情况。网上的文件大多只告诉你其中一种模式的网络设置。

故在这里分别说明,总结来说就是windows和虚拟机直接互传,通过NAT模式将VMnet8的IP和ubuntu的IP设置在同一网段。而采用本地连接方式实现互传,则需要将本地连接和虚拟机调整至桥接模式下设置同一网段。

一.windows和虚拟机互传。

1.虚拟机下拉菜单设置里,选择NAT模式。

 2.在终端里 ifconfig 查看自己的ip地址,

我已经将我的虚拟网卡设置为静态IP.

静态IP地址的设置参照其他文章,输入:sudo vi /etc/network/interfaces

参照如下格式设置好,但是我的网络只有ens33这个起作用,eth0并不起作用。暂时先不管了。

而且我设置的尾字原来是128,但实际显示的是150,这是我在ubuntu的network设置的IP地址。

 

不管怎么样,已经确定好虚拟机这边的IP,解下来就是在windows 这端设置IP.

3.打开windows的网络配置界面,选择VMnet8.

 将里面的IP4地址设置为和虚拟机ubuntu里同一个网段:192.168.0.121

好了,回到ubuntu的里面再去ping windows 就可以ping通啦。这时候用winscp去连接也可以啦。

二.windows通过本地连接连接虚拟机ubuntu和树莓派

1.设置虚拟机的网络适配器为桥接模式,且勾选复制物理网络连接状态。

 2. 在虚拟机编辑下拉菜单的虚拟网络编辑器里选择添加一个网络,选择桥接模式,注意桥接至的地方要选择本地连接对应的那个端口。之前我选择自动,结果就是连不上,要手工选对的那个就连上了。

 

 3.设置完后用ifconfig在终端查看下ip地址。

4.将windows的本地连接的IP地址调至和linux里同一个网段,树莓派的ip和他们同一个网段, 就可以实现通过本地连接实现三者通讯了。

<think>我们之前讨论了通过公钥证书实现SSH远程登录的完整步骤,但那是基于Linux环境的。现在用户的需求是在本地Windows系统虚拟机Ubuntu 20.04系统之间通过公钥证书实现SSH远程登录。下面我们将分步骤说明。 核心思路: 1. 在Windows本地生成SSH密钥对(包括私钥公钥)。 2. 将公钥转换为证书,需要使用CA私钥签名(CA私钥可以放在Ubuntu虚拟机Windows上,这里为了安全通常放在一个安全的地方,但为了方便演示,我们可以选择在Windows上创建CA并签名,或者将公钥传到Ubuntu上用CA签名)。 3. 将CA的公钥配置到Ubuntu的SSH服务器上,以信任该CA。 4. 配置Ubuntu的SSH服务,启用证书认证。 5. Windows客户端使用证书登录。 注意:我们假设用户已经有一个Ubuntu 20.04的虚拟机,并且已经安装了OpenSSH服务器。 步骤详细说明: ### 1. 在Windows上准备CA客户端密钥(两种方案) 方案一(推荐):在Windows上使用OpenSSH客户端(Win10 1809+内置)完成所有操作。 方案二:使用第三方工具(如Git Bash)中的OpenSSH。这里我们以方案一为例。 #### 1.1 检查Windows OpenSSH客户端 在PowerShell中运行: ```powershell ssh -V ``` 确保版本足够新(支持证书操作)。 #### 1.2 生成CA密钥对(如果还没有CA) 在PowerShell中: ```powershell # 生成CA私钥(带密码保护) ssh-keygen -t rsa -b 4096 -f C:\Users\YourName\.ssh\ca_key -C "CA for SSH" # 提取CA公钥 ssh-keygen -y -f C:\Users\YourName\.ssh\ca_key > C:\Users\YourName\.ssh\ca_key.pub ``` #### 1.3 生成客户端密钥对(如果还没有) ```powershell ssh-keygen -t ed25519 -f C:\Users\YourName\.ssh\id_ed25519 ``` #### 1.4 使用CA私钥签发客户端证书 在PowerShell中: ```powershell # 签发证书(注意替换路径) ssh-keygen -s C:\Users\YourName\.ssh\ca_key -I "windows_user" -n "ubuntu_username" -V +1d C:\Users\YourName\.ssh\id_ed25519.pub ``` 参数说明: - `-s`:指定CA私钥 - `-I`:证书标识(任意字符串) - `-n`:指定该证书可以登录的服务器用户名(多个用逗号分隔,这里填Ubuntu上的用户名) - `-V`:有效期,例如`+1d`表示1天 执行后会生成证书文件:`id_ed25519-cert.pub` ### 2. 配置Ubuntu SSH服务器 #### 2.1 将CA公钥复制到Ubuntu服务器 可以使用任何方式(如scp,或者直接复制粘贴)将`ca_key.pub`传到Ubuntu的`/etc/ssh/`目录下。 在Windows PowerShell中用scp复制(确保Ubuntu的ssh服务已开启并允许密码登录,因为此时证书登录还没配置): ```powershell scp C:\Users\YourName\.ssh\ca_key.pub ubuntu_username@ubuntu_ip:/tmp/ ``` 然后在Ubuntu上执行: ```bash sudo mv /tmp/ca_key.pub /etc/ssh/ ``` #### 2.2 修改Ubuntu的SSH配置 编辑`/etc/ssh/sshd_config`: ```bash sudo nano /etc/ssh/sshd_config ``` 修改或添加以下行: ``` # 信任CA公钥 TrustedUserCAKeys /etc/ssh/ca_key.pub # 可选:设置证书用户只能登录特定账户(这里我们已经在签发证书时用-n指定了用户,所以可以不用这个) # AuthorizedPrincipalsFile /etc/ssh/auth_principals/%u # 禁用密码登录(增强安全) PasswordAuthentication no # 允许公钥证书认证(通常默认是开启的,确保以下设置存在) PubkeyAuthentication yes ``` 注意:如果之前没有禁用root登录,且需要允许root证书登录,请设置: ``` PermitRootLogin prohibit-password # 或者 yes(但不推荐) ``` 重启SSH服务: ```bash sudo systemctl restart ssh ``` ### 3. Windows客户端使用证书登录 在Windows PowerShel中,使用以下命令登录: ```powershell ssh -i C:\Users\YourName\.ssh\id_ed25519 ubuntu_username@ubuntu_ip ``` 注意:因为我们已经指定了证书文件(与私钥同名的-cert.pub放在同一目录),OpenSSH会自动使用它。 也可以配置`~\.ssh\config`文件(如果没有则创建): ``` Host ubuntu_vm HostName ubuntu_ip User ubuntu_username IdentityFile ~/.ssh/id_ed25519 CertificateFile ~/.ssh/id_ed25519-cert.pub ``` 然后使用`ssh ubuntu_vm`登录。 ### 4. 测试连接 如果一切正常,应该可以登录成功。 ### 注意事项 1. 证书有效期:如果设置了有效期,过期后需要重新签发。 2. 安全性:CA私钥必须保护好,泄露将导致所有由其签发的证书都不安全。 3. 吊销:如果需要吊销证书,需要配置CRL(证书吊销列表),步骤见之前的回答。 引用说明: - 关于Ubuntu安装SSH服务,可以参考引用[3]中的安装步骤[^3]。 - 关于虚拟机网络配置,如果遇到无法连接外网或主机无法连接虚拟机,可以参考引用[4]中的网络配置[^4]。 - 关于Ubuntu开启root登录(虽然不推荐),引用[2][3]有相关配置[^2][^3],但我们这里不推荐使用root直接登录。 至此,我们完成了从Windows到Ubuntu虚拟机通过公钥证书的SSH登录。 §§ 相关问题 §§ 1. 如何为多个用户批量签发SSH证书? 2. Windows OpenSSH客户端如何管理多个CA? 3. 虚拟机Ubuntu SSH服务无法启动时如何排查? 4. 如何自动更新SSH证书以避免过期? </think>### 在本地 Windows 虚拟机 Ubuntu 20.04 上通过公钥证书实现 SSH 远程登录的完整指南 #### 一、核心架构 ```mermaid graph LR A[Windows客户端] -->|1. 生成密钥对| B(公钥证书体系) C[Ubuntu虚拟机] -->|2. 配置CA信任| B A -->|3. 证书登录| C B -->|CA签名| D[客户端证书] ``` #### 二、具体操作步骤 ##### 1. Windows 端准备(客户端) **(1) 生成密钥对** ```powershell # 打开 PowerShell ssh-keygen -t ed25519 -f $env:USERPROFILE\.ssh\win_ubuntu_key ``` 生成两个文件: - `win_ubuntu_key`(私钥) - `win_ubuntu_key.pub`(公钥) **(2) 创建证书签名请求(CSR)** ```powershell # 将公钥传给 Ubuntu CA(需先配置 SSH 基础连接) scp $env:USERPROFILE\.ssh\win_ubuntu_key.pub user@ubuntu_ip:/tmp/ ``` ##### 2. Ubuntu 端准备(CA 服务端) **(1) 创建 CA 密钥** ```bash sudo ssh-keygen -t rsa -b 4096 -f /etc/ssh/ca_key -C "SSH_CA" sudo ssh-keygen -y -f /etc/ssh/ca_key > /etc/ssh/ca_key.pub ``` **(2) 签发客户端证书** ```bash sudo ssh-keygen -s /etc/ssh/ca_key \ -I "win_client" \ -n "ubuntu_user" \ # 允许登录的用户名 -V +1d \ # 1天有效期 /tmp/win_ubuntu_key.pub ``` 生成证书文件:`win_ubuntu_key-cert.pub` **(3) 传回 Windows 客户端** ```bash scp /tmp/win_ubuntu_key-cert.pub window_user@windows_ip:.ssh/ ``` ##### 3. Ubuntu SSH 服务配置 ```bash sudo nano /etc/ssh/sshd_config ``` ```ini # 启用证书认证 TrustedUserCAKeys /etc/ssh/ca_key.pub PubkeyAuthentication yes # 禁用密码登录(增强安全) PasswordAuthentication no # 允许特定用户登录(可选) AllowUsers ubuntu_user # 重启服务 sudo systemctl restart ssh ``` ##### 4. Windows 客户端连接配置 **(1) 配置 `~/.ssh/config` 文件** ```ini Host ubuntu_vm HostName 192.168.xx.xxx # Ubuntu IP User ubuntu_user IdentityFile ~/.ssh/win_ubuntu_key CertificateFile ~/.ssh/win_ubuntu_key-cert.pub ``` **(2) 连接测试** ```powershell ssh ubuntu_vm ``` 成功登录后显示: ```bash Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-xx-generic x86_64) ``` #### 三、关键注意事项 1. **虚拟机网络配置** - 确保虚拟机使用 **桥接模式** 或 **NAT 端口转发**(参考引用[4]的网络设置[^4]) - 验证互通性:`ping ubuntu_ip` `ping windows_ip` 2. **证书管理最佳实践** - 短期证书:生产环境建议 `-V +1h`(每小时更新) - 自动续期:通过脚本每天生成新证书 ```bash # 示例续期脚本 ssh-keygen -s /etc/ssh/ca_key -I "auto_renew" -n "user" -V +1d /path/to/pubkey ``` 3. **权限控制** 通过 `/etc/ssh/auth_principals/%u` 限制用户权限: ```bash echo "admin" | sudo tee /etc/ssh/auth_principals/ubuntu_user ``` #### 四、故障排查 | 问题现象 | 解决方案 | |---------|---------| | `Permission denied` | 检查证书有效期:`ssh-keygen -L -f cert_file` | | `Certificate invalid` | 验证 CA 公钥路径:`sshd -T | grep trusted` | | 网络不通 | 检查虚拟机网络模式(桥接/NAT)[^4] | | 用户拒绝 | 确认 `AllowUsers` 配置证书中的 `-n` 参数 | > **安全警告**:避免启用 root 证书登录(参考引用[2][3]的安全风险提示[^2][^3]),建议使用普通用户 + sudo 权限管理。 #### 五、与传统登录对比优势 | 场景 | 证书方案 | 密码/密钥方案 | |----------------|--------------------------|-------------------| | 多主机管理 | 单CA控制所有主机访问 | 需每台服务器配密钥 | | 员工离职处理 | 吊销证书即刻生效 | 需逐台删除公钥 | | 临时访问 | 签发分钟级有效证书 | 需永久密钥 | | 密钥泄露风险 | 短期证书自动失效 | 长期有效需手动轮换|
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值