SSH公私钥连接(免密)

基于密钥的安全认证

用户登录远程主机需要持有“公钥/私钥对”,远程服务器持有公钥,本地持有私钥。

客户端向服务器发出请求。服务器收到请求之后,先在用户的主目录下找到该用户的公钥,然后对比用户发送过来的公钥。如果一致,服务器用公钥加密“质询”并发送给客户端。客户端收到“质询”后用私钥解密,再发还给服务器。认证结束。

生成 ssh-key,选加密算法(rsa、dsa),给秘钥命名(可选):

$ ssh-keygen -t rsa -C "name"

passphrase 是证书口令,以加强安全性,避免证书被恶意复制。

会在 ~.ssh 下生成 id_rsa, id_rsa.pub 两个文件,分别是 私钥/公钥。

公钥需保存到远程服务器 ~/.ssh/authorized_keys 里,注意authorized_keys是一个文件,不是文件夹,私钥由客户端本地留存。

要保证 .sshauthorized_keys 都只有用户自己有写权限。否则验证无效。

$ chmod -R 700 ~/.ssh/ 
$ chmod 600 ~/.ssh/authorized_keys 

ssh 配置的一些实践

$ vim /etc/ssh/sshd_config
# 修改以下三个字段
# RSAAuthentication yes 
#	PubkeyAuthentication yes 
#	AuthorizedKeysFile %h/.ssh/authorized_keys  

拷贝公钥至远程服务器

id_rsa.pub文件为本地机器的公钥,需要将其内容放置在远程服务器的/用户名/.ssh/authorized_keys文件中。

方法有两种:

  • ssh-copy-id user@remote

通过此命令可以直接将文件复制到对应用户的.ssh中,如果ssh不是默认端口可以添加-p port来自定义端口号。

  • 手动将文件内容导入

先使用scp将文件复制到远程主机上。

scp /Users/xxxx/.ssh/id_rsa.pub root@xxx.xxx.xxx.xxx:/root/

登录远程主机,将公钥访问认证key文件中。

cat /root/id_rsa.pub >> ~/.ssh/authorized_keys

重启ssh服务

scp、sftp都是基于ssh的协议,因此端口号与ssh均相同,默认为22。

$ service sshd restart
# 重启ssh服务使配置生效

如果不出问题的话,此时在本地主机终端上输入ssh root@xxx.xxx.xxx.xxx就会直接跳过输入密码,登入远程主机终端了。

posted @ 2021-06-08 14:50  宁宁鸡a  阅读(691)  评论(0编辑  收藏  举报