[Linux]-如何使用公钥私钥对登录SSH
引言
这篇文章主要讲解如何使用客户端生成的公钥秘钥对登录服务器,并指定只能通过秘钥验证登录,禁用服务端密码登录功能;文中客户端与服务端均为linux系统,如果用Windows作为客户端,请先下载安装OpenSSH,并注意下文中路径的替换即可。
文章目录
0×0.生成秘钥公钥对
本文所有命令均在root权限下执行,如果没有执行权限报错,请在命令前加上sudo:
#使用邮箱your_email@domain.com作为标识,生成公钥秘钥对,标识可以自定义,不一定要是邮箱 ssh-keygen -t rsa -b 4096 -C "your_email@domain.com" Generating public/private rsa key pair. #在这一行,键入公钥和私钥需要保存的路径以及自定义的文件名,本例保存在/root/.ssh/目录,文件名为testkey Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/testkey #如果不需要使用密码来保护私钥,下面两行直接回车,如果设置了密码,每次使用这个私钥时会提示输入这个密码 Enter passphrase (empty for no passphrase): Enter same passphrase again: #提示,私钥文件位置/root/.ssh/testkey,公钥文件位置/root/.ssh/testkey.pub Your identification has been saved in /root/.ssh/testkey Your public key has been saved in /root/.ssh/testkey.pub The key fingerprint is: SHA256:nAiJ+evs2/Y1lwufRrfGxpsX0upe+OaSHe/3wxWwTn0 your_email@domain.com
0×1.将公钥部署到服务器
#将公钥部署到服务器-i后面是刚才生成的公钥,本例服务器ip是10.10.10.10替换成你的服务器ip即可,服务器上的用户名是root,根据实际情况替换即可 ssh-copy-id -i /root/.ssh/testkey.pub root@10.10.10.10 #输入服务器ssh密码之后,在服务器对应用户的.ssh目录中,会生成一个authorized_keys文件,里面就是testkey.pub公钥中的内容 ls /root/.ssh/ authorized_keys #修改服务器ssh配置 vim /etc/ssh/sshd_config #将下面这一行前面的井号去掉,改成yes,允许使用key文件验证 PubkeyAuthentication yes #重启服务器ssh systemctl restart sshd
0×2.客户端使用秘钥连接服务器
#命令如果上面没有出错,客户端已经可以使用秘钥连接服务器了 #-i后面是客户端本地私钥,后面是“服务器用户名@IP” ssh -i /root/.ssh/testkey root@10.10.10.10
0×3.服务器禁用密码登录
如果想要禁用密码的方式登录服务器:
#修改服务器ssh配置文件 vim /etc/ssh/sshd_config #将下面三行改成no(前面如果有井号也需要删掉) PasswordAuthentication no ChallengeResponseAuthentication no UsePAM no #重启服务器ssh systemctl restart sshd
重启ssh之后,服务器就只能通过key文件进行登录了,请确保key私钥文件不会被误删,否则就..
0×4.scp使用秘钥传输
按照上面的步骤配置秘钥登录之后,scp就不能直接通过密码来验证了,也只能通过秘钥来进行验证传输。
下面是可供参考的上传下载实例:
#从服务器下载test.tar.gz文件到本地家目录 #-i后面跟本地的秘钥文件 #-P(大写)后面是服务器ssh开放的端口,如果端口默认是22,就不需要这个选项 #如果传输的不是压缩包,也不是单个文件,而是一个目录,请添加-r参数,递归复制整个目录 scp -i ~/.ssh/testkey -P 12345 root@10.10.10.10:/root/test.tar.gz ~ #从本地上传test.tar.gz文件到服务器家目录 scp -i ~/.ssh/testkey -P 12345 ~/test.tar.gz root@10.10.10.10:~