跳到主要内容

无密码登录Linux

在本机上生成RSA 4096长度,没有密码的密钥对

ssh-keygen -t rsa -b 4096 -f ./xxx.key -N ""
  • -t rsa指定密钥类型为 RSA。
  • -b 4096 设置密钥长度为 4096 位。
  • -f ./xxx.key 指定生成的密钥文件名,私钥为 xxx.key,位于当前目录下。
  • -N "" 设置新密钥的密码短语为空,这避免了创建密钥时进入交互模式要求输入密码短语。

在服务器上添加公钥

你可以手动添加到~/.ssh/authorized_keys,但是ssh-copy-id会更方便。

ssh-copy-id -i ./xxx.key.pub user@hostname

查看密钥是否成功添加

cat ~/.ssh/authorized_keys

取消密码登录

/etc/ssh/sshd_config里修改

PasswordAuthentication no
注意

sshd_config开头通常有一行Include /etc/ssh/sshd_config.d/*.conf,而sshd对同一配置项以先读到的为准,所以sshd_config.d下的文件会覆盖主文件里的设置。很多云主机镜像(比如 Ubuntu 的50-cloud-init.conf60-cloudimg-settings.conf)就在这里设置了PasswordAuthentication。改完可以用sshd -T | grep -i passwordauthentication确认最终生效的值。

重启sshd服务

systemctl restart sshd

Debian/Ubuntu 上服务的正式名字是sshsshd是它的别名,两个名字都可以用。重启sshd不会断开已建立的 SSH 连接。

验证

在退出当前session之前先检查一下是否可以用公钥登录。 可以在~/.ssh/config下添加服务器信息。

Host server
Hostname 12.34.56.78
User user
IdentityFile ~/Documents/keys/private.key

用这样的配置可以这样登录

ssh server