无密码登录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.conf、60-cloudimg-settings.conf)就在这里设置了PasswordAuthentication。改完可以用sshd -T | grep -i passwordauthentication确认最终生效的值。
重启sshd服务
systemctl restart sshd
Debian/Ubuntu 上服务的正式名字是ssh,sshd是它的别名,两个名字都可以用。重启sshd不会断开已建立的 SSH 连接。
验证
在退出当前session之前先检查一下是否可以用公钥登录。
可以在~/.ssh/config下添加服务器信息。
Host server
Hostname 12.34.56.78
User user
IdentityFile ~/Documents/keys/private.key
用这样的配置可以这样登录
ssh server