一、选择算法和密钥大小
rsa
- 基于分解大数的难度的旧算法。RSA建议密钥大小至少为2048位,4096位更好。RSA正在变老,并且在保理方面取得了重大进展。可能建议选择不同的算法。在可预见的将来,RSA算法很可能会变得切实可行。所有SSH客户端都支持此算法。dsa
- 旧的美国政府数字签名算法。它基于计算离散对数的难度。密钥大小通常与1024一起使用。不再推荐使用其原始形式的DSA。ecdsa
- 一种新的数字签名算法,由美国政府使用椭圆曲线标准化。这可能是当前应用程序的一个很好的算法。仅支持三种密钥大小:256,384和521(sic!)位。我们建议总是使用521位,因为密钥仍然很小,可能比较小的密钥更安全(即使它们也应该是安全的)。大多数SSH客户端现在支持此算法。ed25519
- 这是OpenSSH中添加的新算法。客户对它的支持尚未普及。因此,它在通用应用中的使用可能尚不可取。
# -t 选择算法,-b 选择密钥大小 ssh-keygen -t rsa -b 4096 ssh-keygen -t dsa ssh-keygen -t ecdsa -b 521 ssh-keygen -t ed25519 # 生成密钥文件,默认在 ~/.ssh 目录生成公钥(.pub 结尾)和私钥,-C 更改公钥文件的注释 ssh-keygen -t ecdsa -b 521 -C "test-key" # 复制公钥(可不加后缀名)的内容到免登录机器的 ~/.ssh/authorized_keys 文件中,没有 ~/.ssh/ 目录需要先创建,-p 指定 ssh 端口 ssh-copy-id -i ~/.ssh/id_ecdsa.pub -p 22 root@localhost
二、配置免密登录
# 一直回车,执行完后会生成两个文件id_rsa(私钥),id_rsa.pub(公钥) ssh-keygen -t rsa # 本机免密登录 ssh-copy-id localhost # 将公钥拷贝到要免登陆的机器上 ssh-copy-id -i ~/.ssh/id_rsa.pub remoteIP
# 测试
ssh xxx.xxx.xxx.xxx free -m
三、参数说明
中文:http://www.jinbuguo.com/openssh/ssh-keygen.html
usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1] [-N new_passphrase] [-C comment] [-f output_keyfile] ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile] ssh-keygen -i [-m key_format] [-f input_keyfile] ssh-keygen -e [-m key_format] [-f input_keyfile] ssh-keygen -y [-f input_keyfile] ssh-keygen -c [-P passphrase] [-C comment] [-f keyfile] ssh-keygen -l [-v] [-E fingerprint_hash] [-f input_keyfile] ssh-keygen -B [-f input_keyfile] ssh-keygen -D pkcs11 ssh-keygen -F hostname [-f known_hosts_file] [-l] ssh-keygen -H [-f known_hosts_file] ssh-keygen -R hostname [-f known_hosts_file] ssh-keygen -r hostname [-f input_keyfile] [-g] ssh-keygen -G output_file [-v] [-b bits] [-M memory] [-S start_point] ssh-keygen -T output_file -f input_file [-v] [-a rounds] [-J num_lines] [-j start_line] [-K checkpt] [-W generator] ssh-keygen -s ca_key -I certificate_identity [-h] [-n principals] [-O option] [-V validity_interval] [-z serial_number] file ... ssh-keygen -L [-f input_keyfile] ssh-keygen -A ssh-keygen -k -f krl_file [-u] [-s ca_public] [-z version_number] file ... ssh-keygen -Q -f krl_file file ...
https://www.ssh.com/ssh/keygen/
https://docs.oracle.com/cd/E56344_01/html/E54075/ssh-keygen-1.html
https://www.liaohuqiu.net/cn/posts/ssh-public-key-auto-login/