ssh-keygen 是Unix和类Unix计算机系统上的安全外壳(SSH)协议套件的标准组件,用于通过使用各种加密技术在不安全的网络上建立远程计算机之间的安全shell会话。ssh-keygen 用于生成,管理和转换身份验证密钥。ssh-keygen能够使用三种不同的数字签字算法之一生成密钥。在ssh-keygen工具的帮助下,用户可以为任何这些密钥类型创建密码(为了提供无人值守操作,密码可以保留为空,风险更高)。
命令语法
$ ssh-keygen [options]
常用的命令选项如下
选项 | 说明 |
---|---|
-b bits | 创建秘钥的长度,rsa:最小长度单位768,默认是2048;DSA:1024 |
-C | 提供新注释 |
-p | 请求更改私钥文件的密码而非创建新私钥 |
-t | 指定要创建的密钥类型。rsa、dsa、ecdsa、ed25519 安全度比较高 rsa |
-o | 使用新的OpenSSH格式。 |
-f | 新的文件名 |
###我们能用来做什么?
通过公钥认证可实现ssh免密码登陆,git的ssh方式也是通过公钥进行认证的。
生成秘钥命令
$ ssh-keygen -t rsa -b 4096 -f test -C 'test'
- -t:指定秘钥类型
- -b:指定秘钥长度
- -f:指定生成秘钥文件名
- -C:备注(在公钥文件中的最后可以看到备注)
生成秘钥位置
默认位于 home 目录下 .ssh 目录中,-f 可以指定生成目录以及名称
生成成功后有两个文件
- test(私钥)
- test.pub(公钥)
上传公钥到服务器
$ ssh-copy-id -i ~/.ssh/test.pub root@xxxxxxx
这个方式上传后,会自动追加到服务器上用户目录下 .ssh/authorized_keys 文件中
注意点
- 私钥文件和公钥文件的权限确保合理并且正确,权限过大,在认证中可能被忽略。
- 对于.ssh 以及父文件夹,当前用户用户一定要有执行权限,其他用户最多只能有执行权限。
- 对于公钥和私钥文件也是: 当前用户一定要有执行权限,其他用户最多只能有执行权限。