SSH无密码登录:只需两个简单步骤 (Linux)
如果你管理一台Linux服务器,那么你就会知道每次SSH登录时或者使用scp复制文件时都要输入密码是一个多么繁琐的过程.这篇教程介绍使用SSH Key来实现SSH无密码登录,而且使用scp复制文件时也不需要再输入密码.除了方便SSH登录,scp复制文件外,SSH无密码登录也为Linux服务器增加了又一道安全防线.
SSH无密码登录的设置步骤
- 首先我们在自己的Linux系统上生成一对SSH Key:SSH密钥和SSH公钥.密钥保存在自己的Linux系统上。
- 然后公钥上传到Linux服务器.之后我们就能无密码SSH登录了.SSH密钥就好比是你的身份证明.
1在自己的Linux系统上生成SSH密钥和公钥
打开终端,使用下面的ssh-keygen来生成RSA密钥和公钥.-t表示type,就是说要生成RSA加密的钥匙.
ssh-keygen -t rsa
RSA也是默认的加密类型.所以你也可以只输入ssh-keygen.默认的RSA长度是2048位.如果你非常注重安全,那么可以指定4096位的长度.
ssh-keygen -b 4096 -t rsa
生成SSH Key的过程中会要求你指定一个文件来保存密钥,按Enter键使用默认的文件就行了.然后需要输入一个密码来加密你的SSH Key.密码至少要20位长度.SSH密钥会保存在home目录下的.ssh/id_rsa文件中.SSH公钥保存在.ssh/id_rsa.pub文件中.
Generating public/private rsa key pair. Enter file in which to save the key (/home/matrix/.ssh/id_rsa): 按Enter键 Enter passphrase (empty for no passphrase): 输入一个密码 Enter same passphrase again: 再次输入密码 Your identification has been saved in /home/matrix/.ssh/id_rsa. Your public key has been saved in /home/matrix/.ssh/id_rsa.pub. The key fingerprint is: e1:dc:ab:ae:b6:19:b0:19:74:d5:fe:57:3f:32:b4:d0 matrix@vivid The key's randomart image is: +---[RSA 4096]----+ | .. | | . . | | . . .. . | | . . o o.. E .| | o S ..o ...| | = ..+...| | o . . .o .| | .o . | | .++o | +-----------------+
查看.ssh/id_rsa文件就会看到,这个文件是经过加密的(encrypted).也就是用你输入的密码来加密.
less .ssh/id_rsa
2将SSH公钥上传到Linux服务器
可以使用ssh-copy-id命令来完成.
ssh-copy-id username@remote-server
输入远程用户的密码后,SSH公钥就会自动上传了.SSH公钥保存在远程Linux服务器的.ssh/authorized_keys文件中.
上传完成后,SSH登录就不需要再次输入密码了.但是首次使用SSH Key登录时需要输入一次SSH密钥的加密密码.(只需要输入一次,将来会自动登录,不再需要输入密钥的密码.)
使用scp命令来传送文件时也不需要输入密码.
SSH Key的知识
Linux系统有一个钥匙环(keyring)的管理程序.钥匙环受到用户登录密码的保护.当你登录Linux系统时,会自动解开钥匙环的密码,从而可访问钥匙环.SSH密钥的密码也可存储在钥匙环.所以初次使用SSH密钥登录远程Linux服务器时需要输入一次SSH密钥的密码.而将来使用SSH密钥登录时不再输入密码.Ubuntu的钥匙环程序是seahorse.
SSH密钥就好比是你的身份证明.远程Linux服务器用你生成的SSH公钥来加密一条消息,而只有你的SSH密钥可以解开这条消息.所以其他人如果没有你的SSH密钥,是无法解开加密消息的,从而也就无法登录你的Linux服务器.
SSH无密码登录的设置就是这么简单。
学习了 ssh-copy-id。很优雅啊,为了完成小功能的小工具:)
Hugh Wang 学弟告诉我,如果不用 ssh-copy-id 而是手工创建 ~/.ssh/authorized_keys,不仅要打对文件名,而且这文件的 owner 和 group 都得配置对,权限也得 0600,才能被 ssh 认。
@hurray0:disqus 除了这个 At,你能因为我的上面这条回复而收到通知吗?
上面的回复只有我能收到通知。
即使@Hurray 给第一个回复点了赞也不会因此订阅后续通知吗,soudesune
管理员能接收所有的通知。其他人的话,要先留言,然后有人回复留言才能收到通知。@后只能收到@的这条回复,其他回复不会通知。
哇哦!学到,非常感谢 :D
非常感谢
ssh-copy-id学到了,谢谢,请问可以转载这篇文章吗?仅仅是转载到个人博客方便查阅,不会做商业用途的。
转载需在文章开头标明原文链接,不可加 rel = “nofollow” 标签。
https://www.cnblogs.com/sogeisetsu/p/11397698.html
转载到了这https://www.cnblogs.com/sogeisetsu/p/11397698.html
“钥匙环受到用户登录密码的保护.当你登录Linux系统时,会自动解开钥匙环的密码,从而可访问钥匙环.SSH的密钥和公钥也存储在钥匙环.所以初次使用SSH密钥登录远程Linux服务器时需要输入一次SSH密钥的密码.而将来使用SSH密钥登录时不再输入密码.”
没有太看懂这句话的逻辑。还是不清楚为何第一次需要输入密钥的密码,后续再次使用密钥时,就不需要密钥的密码了。
因为生成 SSH钥匙 (SSH Key) 后, 密码 (passphrase) 并没有自动保存到 系统钥匙环 (keyring)。在你第一次输入SSH密钥的密码时,应该会有提示让你保存这个密码在系统钥匙环。
明白了,谢谢!
所以原文中的这一句 — “SSH的密钥和公钥也存储在钥匙环.” — 准确说应该是“SSH密钥的密码也可以存储在钥匙环上” ?
是的。