开发者社区> 技术小阿哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

SSH 两种验证方式原理

简介:
+关注继续查看

SSH登录方式主要分为两种:

  1. 用户名密码验证方式

    (1) 当客户端发起ssh请求,服务器会把自己的公钥发送给用户;

  (2) 用户会根据服务器发来的公钥对密码进行加密;

  (3) 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功。

  1. 基于密钥的登录方式

  (1) 首先在客户端生成一对密钥(ssh-keygen);

  (2) 并将客户端的公钥ssh-copy-id 拷贝到服务端;

  (3) 当客户端再次发送一个连接请求,包括ip、用户名;

  (4) 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:qwer;

  (5) 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端;

  (6) 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端;

  (7) 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录。

生成密钥的方式:

所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求输入密码,这和之前的ssh账号密码也没有直接关系。 
这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个:

$ ssh-keygen

运行上面的命令以后,系统会出现一系列提示,可以一路回车。其中有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。 
运行结束以后,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。 
这时再输入下面的命令,将公钥传送到远程主机host上面:

$ ssh-copy-id user@host

好了,从此你再登录远程主机,就不需要输入密码了。 
如果还是不行,就打开远程主机的/etc/ssh/sshd_config这个文件,检查下面几行前面"#"注释是否取掉。

RSAAuthentication yes   
PubkeyAuthentication yes   
AuthorizedKeysFile .ssh/authorized_keys

然后,重启远程主机的ssh服务。 
关于authorized_keys文件 
远程主机将用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。 
如果不使用上面的ssh-copy-id命令,改用下面的命令也可以:

scp -P 22 id_rsa.pub root@192.168.1.77:/root/.ssh/authorized_keys 
root@192.168.1.77's password:   <-- 输入机器Server的root用户密码 
id_rsa.pub                                                              100%  218     0.2KB/s   00:00 

如果远程主机的authorized_keys文件已经存在,也可以往里添加公钥: 
先将公钥文件上传到远程主机中, 
#scp -P 2007 ~/.ssh/id_rsa.pub root@192.168.1.91:/root/ 
SSH到登陆到远程主机,将公钥追加到 authorized_keys 文件中 
cat /root/id_rsa.pub >> /root/.ssh/authorized_keys 
或直接运行命令: 
cat ~/.ssh/id_dsa.pub|ssh -p 22 root@192.168.1.91 cat - &gt;&gt; ~/.ssh/authorized_keys
写入authorized_keys文件后,公钥登录的设置就完成了。



本文转自 f_066 51CTO博客,原文链接:http://blog.51cto.com/ganmu/2073901,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SSH远程连接 - 基于密钥验证 | 学习笔记
快速学习SSH远程连接 - 基于密钥验证。
0 0
SSH远程连接 - 基于用户名密码验证 | 学习笔记
快速学习SSH远程连接 - 基于用户名密码验证。
0 0
SSH远程连接 - 基于密钥验证
一、基于密钥的登录方式 二、基于密钥登陆的操作
0 0
SSH远程连接 - 基于用户名密码验证
一、SSH(安全外壳协议) 二、用户名密码验证方式
0 0
完成ssh无密码的验证,采用公钥、私钥
linux完成ssh无密码的验证,采用公钥、私钥
6704 0
SSH无密码验证
一、安装和启动SSH协议  假设没有安装ssh和rsync,可以通过下面命令进行安装。 sudo apt-get install ssh 安装SSH协议 sudo apt-get install rsync service sshd restart 启动服务 (rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件) 确保所有的服务器都安装,上面命令执行完毕,各台机器之间可以通过密码验证相互登。
938 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载