SSH证书连接配置DEBUG步骤

本文记录了在设置SSH证书登录云服务器时遇到的问题及解决过程。通过开启SSH verbose模式,发现奴隶主机上的权限问题导致认证失败。解决方法是确保.ssh目录权限为700,authorized_keys文件权限为600,避免组写权限。遵循这些步骤后,成功建立了SSH连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前在笔记本上用虚拟机构建分布式系统,结果把机器卡得不行,于是租了三台服务器云主机,但在设置SSH证书登陆的时候遇到了些问题,在此记录下细节及解决方法

按照常规设置一步步来

# 设置sshd_config,编辑开启证书登陆
sudo vi /etc/ssh/sshd_config

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

# 重启sshd服务
sudo service sshd start

# 生成ssh key
ssh-keygen -t dsa

# 检查生成的key
ls -al /home/spark/.ssh
drwx------ 2 spark spark 4096 Sep   1 23:37 .
drwx------ 5 spark spark 4096 Sep   1 23:37 ..
-rw------- 1 spark spark  668 Sep   1 23:37 id_dsa
-rw-r--r-- 1 spark spark  602 Sep   1 23:37 id_dsa.pub

# 手动创建authorized_keys文件(我会告诉你这是一个坑吗?)
touch authorized_keys

# 将所有集群主机的公钥.pub文件内容追加到authorized_keys文件

# master主机SSH连接slave2主机
[spark@master ~]$ ssh -p 220
PS C:\Users\赵嘉楠> ssh -v 10.10.11.160 OpenSSH_for_Windows_9.5p1, LibreSSL 3.8.2 debug1: Reading configuration data C:\\Users\\\350\265\265\345\230\211\346\245\240/.ssh/config debug1: C:\\Users\\\350\265\265\345\230\211\346\245\240/.ssh/config line 1: Applying options for * debug1: C:\\Users\\\350\265\265\345\230\211\346\245\240/.ssh/config line 5: Applying options for 10.10.11.160 debug1: Connecting to 10.10.11.160 [10.10.11.160] port 22. debug1: Connection established. debug1: identity file C:\\Users\\\350\265\265\345\230\211\346\245\240\\.ssh\\id_ed25519 type 3 debug1: identity file C:\\Users\\\350\265\265\345\230\211\346\245\240\\.ssh\\id_ed25519-cert type -1 debug1: Local version string SSH-2.0-OpenSSH_for_Windows_9.5 debug1: Remote protocol version 2.0, remote software version OpenSSH_7.6p1 Ubuntu-4ubuntu0.7 debug1: compat_banner: match: OpenSSH_7.6p1 Ubuntu-4ubuntu0.7 pat OpenSSH_7.0*,OpenSSH_7.1*,OpenSSH_7.2*,OpenSSH_7.3*,OpenSSH_7.5*,OpenSSH_7.6*,OpenSSH_7.7* compat 0x04000002 debug1: Authenticating to 10.10.11.160:22 as 'jianan.zhao' debug1: load_hostkeys: fopen C:\\Users\\\350\265\265\345\230\211\346\245\240/.ssh/known_hosts: No such file or directory debug1: load_hostkeys: fopen C:\\Users\\\350\265\265\345\230\211\346\245\240/.ssh/known_hosts2: No such file or directory debug1: load_hostkeys: fopen __PROGRAMDATA__\\ssh/ssh_known_hosts: No such file or directory debug1: load_hostkeys: fopen __PROGRAMDATA__\\ssh/ssh_known_hosts2: No such file or directory debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: algorithm: curve25519-sha256 debug1: kex: host key algorithm: ssh-ed25519 debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none debug1: expecting SSH2_MSG_KEX_ECDH_REPLY debug1: SSH2_MSG_KEX_ECDH_REPLY received debug1: Server host key: ssh-ed25519 SHA256:SYUrRbM7d3XNt087+kqB/Lwq94oVzTY8CUgX8bT1Ej0 debug1: load_hostkeys: fopen C:\\Users\\\350\265\265\345\230\211\346\245\240/.ssh/known_hosts: No such file or directory debug1: load_hostkeys: fopen C:\\Users\\\350\265\265\345\230\211\346\245\240/.ssh/known_hosts2: No such file or directory debug1: load_hostkeys: fopen __PROGRAMDATA__\\ssh/ssh_known_hosts: No such file or directory debug1: load_hostkeys: fopen __PROGRAMDATA__\\ssh/ssh_known_hosts2: No such file or directory debug1: hostkeys_find_by_key_hostfile: hostkeys file C:\\Users\\\350\265\265\345\230\211\346\245\240/.ssh/known_hosts does not exist debug1: hostkeys_find_by_key_hostfile: hostkeys file C:\\Users\\\350\265\265\345\230\211\346\245\240/.ssh/known_hosts2 does not exist debug1: hostkeys_find_by_key_hostfile: hostkeys file __PROGRAMDATA__\\ssh/ssh_known_hosts does not exist debug1: hostkeys_find_by_key_hostfile: hostkeys file __PROGRAMDATA__\\ssh/ssh_known_hosts2 does not exist The authenticity of host '10.10.11.160 (10.10.11.160)' can't be established. ED25519 key fingerprint is SHA256:SYUrRbM7d3XNt087+kqB/Lwq94oVzTY8CUgX8bT1Ej0. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])?
03-20
<think>嗯,用户现在问的是SSH的加密方式。之前他们比较过DAS和NAS使用SSH的情况,现在可能想深入了解SSH本身的安全机制。首先,我需要回顾SSH的加密体系,包括密钥交换、对称加密、非对称加密和消息认证码这几个部分。 用户可能不太清楚这些加密方式的具体作用,比如为什么需要密钥交换,对称和非对称加密的区别在哪里。得用简单易懂的语言解释清楚,避免太多技术术语。同时,他们可能关心实际应用中的配置,比如如何选择加密算法,常见的安全隐患有哪些,比如过时的算法可能带来的风险。 另外,用户可能是在配置服务器或者维护现有系统,需要知道如何检查当前的加密设置,更新更安全的算法。比如禁用不安全的Diffie-Hellman组,使用Ed25519密钥等。可能还需要给出具体的命令示例,比如查看支持的加密算法,或者修改SSH配置文件的步骤。 还要注意用户可能存在的误区,比如认为只要使用SSH就是绝对安全的,但实际上配置不当也会有漏洞。需要强调定期更新和遵循最佳实践的重要性,比如禁用SSHv1,使用证书登录而非密码等。 总结下来,回答结构应该先介绍SSH的加密层次,然后分点详细说明每个部分,再给出配置建议和示例,最后提醒安全注意事项。这样用户能全面理解SSH的加密机制,并知道如何应用在实际环境中。</think>以下是SSH加密方式的详细说明,按技术层次逐步展开: --- ### **一、SSH加密的核心机制** SSH协议通过分层加密体系保障通信安全,核心包含4个关键环节: 1. **密钥交换(Key Exchange)** - **作用**:在客户端与服务器之间协商出临时会话密钥(Session Key),用于后续对称加密。 - **常用算法**: - `Diffie-Hellman`(DH):基于离散对数问题,如`diffie-hellman-group14-sha1` - `Elliptic Curve Diffie-Hellman`(ECDH):更高效且抗量子计算,如`ecdh-sha2-nistp256` - **安全警告**:避免使用`group1`(已过时)和`sha1`哈希的算法。 2. **对称加密(Symmetric Encryption)** - **作用**:用会话密钥加密实际传输的数据,速度快且适合大数据量。 - **常用算法**(按安全性排序): - 首选:`AES-256-GCM`(支持认证加密)、`ChaCha20-Poly1305` - 次选:`AES-256-CBC`、`AES-128-CTR` - **淘汰算法**:`DES`、`3DES`、`RC4`(存在严重漏洞) 3. **非对称加密(Asymmetric Encryption)** - **作用**:用于身份认证(如密钥登录)和密钥交换的签名验证。 - **密钥类型**: - `RSA`:传统算法,建议密钥长度≥3072位(2048位已逐渐淘汰) - `Ed25519`:基于椭圆曲线,密钥短、安全性高,**推荐首选** - `ECDSA`:需谨慎选择曲线(优先`nistp384`,避免`nistp256`潜在风险) 4. **消息认证码(HMAC)** - **作用**:验证数据完整性,防止篡改。 - **算法选择**: - 安全选项:`hmac-sha2-512`、`hmac-sha2-256` - 禁用选项:`hmac-md5`、`hmac-sha1`(已存在碰撞攻击风险) --- ### **二、SSH加密流程示例** 以`SSHv2`连接为例(**SSHv1已彻底淘汰**): 1. 客户端发起TCP连接,协商协议版本。 2. 双方交换支持的算法列表,选择最高安全等级的算法组合。 3. 通过Diffie-Hellman生成会话密钥。 4. 使用非对称加密验证服务器身份(如`Ed25519`主机密钥)。 5. 建立加密通道,后续数据通过对称加密(如`AES-256-GCM`)传输。 --- ### **三、配置建议(OpenSSH为例)** 1. **服务器配置**(`/etc/ssh/sshd_config`): ```bash # 强制使用SSHv2 Protocol 2 # 指定算法优先级 KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-ed25519 ``` 2. **客户端密钥生成**: ```bash # 生成Ed25519密钥(推荐) $ ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519 # 生成RSA密钥(如需兼容旧系统) $ ssh-keygen -t rsa -b 4096 -o -a 100 -f ~/.ssh/id_rsa ``` --- ### **四、安全隐患与应对** | **风险点** | **解决方案** | |-----------------------|---------------------------------------| | 弱密钥交换算法(如group1) | 禁用`diffie-hellman-group1-sha1` | | CBC模式漏洞 | 优先使用CTR或AEAD模式(如GCM) | | 过时的RSA密钥长度 | 升级到≥3072位或改用Ed25519 | | 未禁用SSHv1 | 配置`Protocol 2` | --- ### **五、调试与验证** 1. **查看当前使用的算法**: ```bash $ ssh -vvv user@host 2>&1 | grep "kex_algorithm\|cipher\|mac" # 输出示例: # debug3: kex: algorithm: curve25519-sha256@libssh.org # debug3: cipher: aes256-gcm ``` 2. **检测服务器支持的算法**: ```bash $ nmap --script ssh2-enum-algos host ``` --- ### **总结** SSH通过多层加密机制构建安全隧道,**现代部署应优先选择:** - 密钥交换:`curve25519-sha256` - 对称加密:`AES-256-GCM`或`ChaCha20-Poly1305` - 主机密钥:`Ed25519` - 消息认证:`HMAC-SHA2-512` 定期审计SSH配置并禁用弱算法是维护安全性的关键。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值