SSH 两种验证方式原理
2018-02-28 14:57
351 查看
SSH登录方式主要分为两种:
用户名密码验证方式
(1) 当客户端发起ssh请求,服务器会把自己的公钥发送给用户;
(2) 用户会根据服务器发来的公钥对密码进行加密;
(3) 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功。
基于密钥的登录方式
(1) 首先在客户端生成一对密钥(ssh-keygen);
(2) 并将客户端的公钥ssh-copy-id 拷贝到服务端;
(3) 当客户端再次发送一个连接请求,包括ip、用户名;
(4) 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:qwer;
(5) 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端;
(6) 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端;
(7) 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录。
生成密钥的方式:
所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求输入密码,这和之前的ssh账号密码也没有直接关系。
这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个:
运行上面的命令以后,系统会出现一系列提示,可以一路回车。其中有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。
运行结束以后,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。
这时再输入下面的命令,将公钥传送到远程主机host上面:
好了,从此你再登录远程主机,就不需要输入密码了。
如果还是不行,就打开远程主机的/etc/ssh/sshd_config这个文件,检查下面几行前面"#"注释是否取掉。
然后,重启远程主机的ssh服务。
关于authorized_keys文件
远程主机将用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。
如果不使用上面的ssh-copy-id命令,改用下面的命令也可以:
如果远程主机的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
写入authorized_keys文件后,公钥登录的设置就完成了。
http://blog.csdn.net/zyboy2000/article/details/53057330
用户名密码验证方式
(1) 当客户端发起ssh请求,服务器会把自己的公钥发送给用户;
(2) 用户会根据服务器发来的公钥对密码进行加密;
(3) 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功。
基于密钥的登录方式
(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 - >> ~/.ssh/authorized_keys
写入authorized_keys文件后,公钥登录的设置就完成了。
参考 :https://www.cnblogs.com/hukey/p/6248468.html
http://blog.csdn.net/zyboy2000/article/details/53057330
相关文章推荐
- [ SSH 两种验证方式原理 ]
- [ SSH 两种验证方式原理 ]
- [ SSH 两种验证方式原理 ]
- SSH的两种验证方式
- SSH通信两种方式的原理
- JGit与远程仓库链接使用的两种验证方式(ssh和https)
- OpenStack Client客户端的两种身份验证方式
- [转载] redis 的两种持久化方式及原理
- SSH深度历险(十一) AOP原理及相关概念学习+xml配置实例(对比注解方式的优缺点)
- Eclipse导入git工程(HTTP与SSH两种导入方式)
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
- (4) 编码剖析Spring装配基本属性的原理【附加:注入依赖对象的两种方式】
- 一起看懂Redis两种持久化方式的原理
- 快速排序的两种实现方式,主要是Partition函数的实现原理不一样
- Dynamics CRM 非声明验证方式下连接组织服务的两种方式的性能测试
- Oracle中的两种验证方式:操作系统验证和密码文件验证,通过操作系统验证的方式解决客户端登录不了数据的问题
- 两种利用GCD实现分步获取结果的方式和SDWebImage缓存机制的验证
- jwt是和oauth相互不同的两种验证方式么?
- HttModule和抽象类BasePage两种方式进行用户身份验证
- 使用PuTTY登录Linux的两种验证方式