[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:~