关于ssh-keygen命令的介绍与用法

本文详细介绍如何通过ssh-keygen生成密钥,并使用ssh-copy-id命令分发公钥至服务器,实现SSH免密码登录。此外,还介绍了如何解决登录过程中遇到的问题。

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

ssh-keygen 用于:生成、管理和转换认证密钥

常用参数

-t type:指定要生成的密钥类型,有rsa1(SSH1),dsa(SSH2),ecdsa(SSH2),rsa(SSH2)等类型,较为常用的是rsa类型

-C comment:提供一个新的注释

 -b bits:指定要生成的密钥长度 (单位:bit),对于RSA类型的密钥,最小长度768bits,默认长度为2048bits。DSA密钥必须是1024bits

-f filename:指定生成的密钥文件名字

Linux下使用ssky-keygen无密码登录服务器步骤:

1.  使用ssh-keygen在本机上生成密钥:

[Jiakun@Kunge ~]$ ssh-keygen -t rsa -C "kungeplay@gmail.com|blueskywww@126.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/Jiakun/.ssh/id_rsa):[Enter key]  
/home/Jiakun/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):[Enter key]  
Enter same passphrase again:[Enter key]  
Your identification has been saved in /home/Jiakun/.ssh/id_rsa.
Your public key has been saved in /home/Jiakun/.ssh/id_rsa.pub.
The key fingerprint is:
ac:15:9d:97:2a:f3:43:ed:64:25:38:ad:54:d2:bd:c8 kungeplay@gmail.com|blueskywww@126.com

此时在本机上生成如下一个公钥和一个私钥文件:

[Jiakun@Kunge ~]$ ll ./.ssh/
总用量 12
-rw-------. 1 Jiakun Jiakun 1675 5月  19 19:44 id_rsa
-rw-r--r--. 1 Jiakun Jiakun  420 5月  19 19:44 id_rsa.pub

注意公钥相当于锁,私钥相当于钥匙,我们这里相当于在客户端创建一对钥匙和锁,想要做到SSH免密码登录,就相当于我们将锁分发到服务端并装锁,然后客户端就可以利用这个钥匙开锁。

2.  使用ssh-copy-id命令将本机上的公钥文件拷贝到服务器上(服务器用户名比如为liujiakun,IP地址为192.168.3.105):

[Jiakun@Kunge ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub liujiakun@192.168.3.105
liujiakun@192.168.3.105's password: 
Now try logging into the machine, with "ssh 'liujiakun@192.168.3.105'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

若服务器端远程登录ssh的端口号被更改了(比如为3330),则命令应改为这样:

ssh-copy-id -i ~/.ssh/id_rsa.pub “-p 3330 liujiakun@192.168.3.105“

3.  此时在本机上登录服务器会提示Agent admitted failure to sign using the key.并仍提示需要输入密码:

[Jiakun@Kunge ~]$ ssh liujiakun@192.168.3.105
Agent admitted failure to sign using the key.
liujiakun@192.168.3.105's password: 
在网上查询得知需要使用 ssh-add 指令将私钥 加进来:

[Jiakun@Kunge ~]$ ssh-add ~/.ssh/id_rsa
Identity added: /home/Jiakun/.ssh/id_rsa (/home/Jiakun/.ssh/id_rsa)
[Jiakun@Kunge ~]$ ssh 'liujiakun@192.168.3.105'
Last login: Tue May 19 20:32:32 2015 from 192.168.3.118
此时如上所示可以无密码登录进192.168.3.118服务器上。

可以在服务器上查询~/.ssh/目录下多了一个文件:authorized_keys:

[liujiakun@localhost ~]$ ll ./.ssh/
总用量 8
-rw-------. 1 liujiakun liujiakun  420 5月  19 20:25 authorized_keys
-rw-r--r--. 1 liujiakun liujiakun 1191 1月  11 19:03 known_hosts

<think>嗯,用户想了解ssh-keygenssh-copy-id的详细用法和示例。首先,我得回忆一下这两个命令的基本作用。ssh-keygen是用来生成SSH密钥对的,包括私钥和公钥,而ssh-copy-id则是用来将公钥复制到远程服务器上,实现免密登录的。需要确保覆盖用户可能遇到的各种情况,比如不同的参数、不同环境下的使用方法。 首先,我应该从ssh-keygen开始,介绍它的基本用法,比如生成密钥对的命令,可能需要提到不同的加密算法,如RSA、Ed25519,因为用户可能不知道哪种更安全。然后,参数方面,-t指定类型,-b指定位数,-f指定保存路径,-N设置空密码,这些都很重要。例如,生成RSA 4096位的密钥对,或者更安全的Ed25519,这时候需要说明各自的优缺点。 接下来是示例部分,要给出具体的命令和输出结果,让用户能跟着操作。比如,使用ssh-keygen -t rsa -b 4096,然后解释每一步的提示,比如保存路径和密码短语。可能还需要提到无密码的情况,使用-N ''参数,方便自动化脚本,但也要提醒用户注意安全风险。 然后是ssh-copy-id用法,这个命令其实简化了手动复制公钥的过程。需要说明它的基本格式,比如ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host。还要提到如果端口不是默认的22,需要用-p指定端口号。另外,如果用户没有安装ssh-copy-id,可能需要手动操作,比如通过cat和ssh命令组合,这在引用中也有提到,比如引用1和4中的方法,需要把这些方法也包含进去,确保用户在不同环境下都能操作。 另外,权限问题也很关键,比如.ssh目录需要700权限,authorized_keys需要600权限,否则SSH不会正常工作。引用4提到了设置权限的步骤,需要包含在回答中,避免用户遇到权限错误。 可能用户还会想知道如何验证是否配置成功,这时候可以建议使用ssh user@host命令,看是否能直接登录,不需要密码。同时,注意引用各个参考资料里的内容,比如引用3提到生成无密码短语的密钥,引用5提到公钥保存的位置,这些都需要在适当的地方标注引用标识。 最后,相关问题的生成需要考虑用户可能的后续疑问,比如如何修改密钥密码、权限问题、不同加密算法的选择、多密钥管理以及非默认端口的使用。这些问题可以帮助用户深入理解并解决其他可能遇到的问题。 需要确保整个回答结构清晰,步骤明确,示例具体,同时引用正确,符合用户的要求。还要检查LaTeX格式是否正确,行内公式用$...$,独立公式用$$...$$,不过在这个主题中可能数学公式不多,但如果有提到加密算法相关的数学概念,可能需要用LaTeX表达。不过当前问题主要涉及命令和步骤,可能用代码块更多。需要确保代码块格式正确,比如使用反引号包裹,标明语言类型。</think>### SSH密钥生成部署工具详解 #### 一、ssh-keygen用法 $ssh-keygen$是生成SSH密钥对的核心工具,支持RSA、Ed25519等多种加密算法[^2][^3] 1. **基础命令示例** ```bash ssh-keygen -t rsa -b 4096 -C "mykey@2024" ``` * `-t rsa`:指定密钥类型为RSA * `-b 4096`:设置密钥长度为4096位 * `-C`:添加密钥注释(通常用于标识用途) 2. **高级参数组合** ```bash ssh-keygen -f ~/.ssh/server_key -t ed25519 -N '' ``` * `-f`:自定义密钥存储路径 * `-t ed25519`:使用更安全的Ed25519算法 * `-N ''`:设置空密码短语(需谨慎使用)[^3] 3. **典型交互流程** ```bash $ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/user/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user/.ssh/id_rsa Your public key has been saved in /home/user/.ssh/id_rsa.pub ``` #### 二、ssh-copy-id用法 $ssh-copy-id$实现公钥自动部署,本质是将公钥追加到远程主机的$authorized_keys$文件[^1][^5] 1. **标准使用方式** ```bash ssh-copy-id -i ~/.ssh/id_rsa.pub -p 2222 user@remotehost ``` * `-i`:指定公钥文件路径 * `-p`:指定非默认SSH端口 2. **等效手动操作**(适用于无ssh-copy-id环境)[^4] ```bash cat ~/.ssh/id_rsa.pub | ssh user@host "mkdir -p ~/.ssh && chmod 700 ~/.ssh; cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys" ``` 3. **权限验证要点** ```bash # 本地密钥权限 chmod 600 ~/.ssh/id_rsa # 远程目录权限 ssh user@host "chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys" ``` #### 三、综合应用示例 **场景**:为web服务器集群配置免密登录 ```bash # 生成Ed25519密钥(无密码短语) ssh-keygen -t ed25519 -f ~/.ssh/webcluster -N '' # 批量部署到10台服务器 for i in {1..10}; do ssh-copy-id -i ~/.ssh/webcluster.pub -p 8022 admin@web0$i.example.com done # 验证登录 ssh -i ~/.ssh/webcluster -p 8022 admin@web01.example.com ``` **注意事项**: 1. 生产环境建议设置密码短语并使用$ssh-agent$管理 2. 定期轮换密钥(推荐每90天更新) 3. 使用不同密钥对不同服务器组[^5] 相关问题
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值