原文地址:http://lxshopping.blog.51cto.com/4542643/1179864/

一,不需要输密码的ssh

原理:首先服务器端把公钥传给Client端,Client端在验证了服务器的可信性以后,可以通过对称加密传输数据。当Client要链接到server的时候,会通过/etc/shadow验证用户名和密码,但是如果在客户端产生一对密钥,然后把产生的公钥传到服务器端,这样的话在接受了客户端用私钥加密的数据以后可以直接用服务器拥有的客户机的公钥进行解密,用的是公钥加密私钥解密的模式,而不需要读/etc/shadow文件,这是两种不同的连接方式。

1,在ssh的server端启动sshd服务就会产生public key 和private key,一共3对钥匙。

  1. [root@server1 ssh]# service sshd restart
  2.  
  3. Stopping sshd: [ OK ]
  4.  
  5. Generating SSH1 RSA host key: [ OK ]
  6.  
  7. Generating SSH2 RSA host key: [ OK ]
  8.  
  9. Generating SSH2 DSA host key: [ OK ]
  10.  
  11. Starting sshd:
  1. [root@server1 ssh]# ls (/etc/ssh
  2.  
  3. moduli ssh_host_dsa_key ssh_host_key.pub
  4.  
  5. ssh_config ssh_host_dsa_key.pub ssh_host_rsa_key
  6.  
  7. sshd_config ssh_host_key ssh_host_rsa_key.pub

2,每次有Client端的ssh联机需求传过来时,server就会传公钥给Client,此时client会利用/etc/ssh/ssh_know_hosts或者~/.ssh/know_hosts对比公钥的正确性。~/.ssh/know_hosts会记录曾经连过的服务器的public_key,

  1. [root@server2 ~]# rm -fr .ssh/known_hosts
  2.  
  3. [root@server2 ~]# ls .ssh/
  4.  
  5. [root@server2 ~]# ssh ###如果在连某个主机的时候know_hosts里面没有记录,则在ssh的时候会弹出对话并在里面添加这条记录,这样下次再连的时候就不会再询问###
  6.  
  7. The authenticity of host '192.168.12.1 (192.168.12.1)' can't be established.
  8.  
  9. RSA key fingerprint is cf:ea:::9b:fb:::7e:c5::0b::fb::db.
  10.  
  11. Are you sure you want to continue connecting (yes/no)? yes
  12.  
  13. Warning: Permanently added '192.168.12.1' (RSA) to the list of known hosts.
  14.  
  15. root@192.168.12.1's password:

Server上 查看server上的指纹,与返回到Client端得指纹一样,则验证了主机的真实性,每一对密钥都有一样的指纹。

  1. [root@server4 ~]# ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
  2.  
  3. cf:ea:::9b:fb:::7e:c5::0b::fb::db /etc/ssh/ssh_host_rsa_key.pub
  4.  
  5. [root@server4 ~]# ssh-keygen -lf /etc/ssh/ssh_host_rsa_key
  6.  
  7. cf:ea:::9b:fb:::7e:c5::0b::fb::db /etc/ssh/ssh_host_rsa_key.pub
  1. [root@server2 ~]# cat .ssh/known_hosts
  2.  
  3. 192.168.12.1 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvPOQ0LmlgrE15e37+eL2fGXGAbUaSr1BI5nWFjXc/pdN3MbGIPBDWnKryIke6gR3wxag72IZ5ZmXQ0VQ6CPBD/lumAo0Ymq2B70l9eyxri8j++O+DbQVmFMJ3aGgr2qf70NXC1I+C22i6Chfx2gWTm9rtDDa/5fYrXseqGlM+EhG7MgC2bIkcAweboDejd+4wet0Kgp0YSl+QVlqbsTMJi4fvhIt/n95+CzJFhp0uOcRvFvIuW+wGM3b7Tg7O3r6VzNBZJM27LHuoWRItHuFpkitT58fsp3aBkIeNR22V65SY/5ICO2ywz0QCYZAz4gcjFsEAGKqL1GqdwTkuN+QAQ==

####添加了该访问记录###

客户端产生密钥对

  1. [root@server2 ~]# ssh-keygen -t rsa
  2.  
  3. Generating public/private rsa key pair.
  4.  
  5. Enter file in which to save the key (/root/.ssh/id_rsa):
  6.  
  7. Enter passphrase (empty for no passphrase): ###这是对产生的私钥进行加密###
  8.  
  9. Enter same passphrase again:
  10.  
  11. Your identification has been saved in /root/.ssh/id_rsa. ###客户端的私钥###
  12.  
  13. Your public key has been saved in /root/.ssh/id_rsa.pub. ###客户端的公钥###
  14.  
  15. The key fingerprint is:
  16.  
  17. ed:af::8c:::0c::::b5:e1::dc::5c root@server2
  1. [root@server2 ~]# cd .ssh/
  2.  
  3. [root@server2 .ssh]# ls
  4.  
  5. id_rsa id_rsa.pub known_hosts ###客户端产生的密钥对存在这下面###
  6.  
  7. ###把客户端的公钥传给客户端###
  8.  
  9. [root@server2 .ssh]# ssh-copy-id -i id_rsa.pub 192.168.12.1
  10.  
  11. root@192.168.12.1's password:
  12.  
  13. Now try logging into the machine, with "ssh '192.168.12.1'", and check in:
  14.  
  15. .ssh/authorized_keys
  16.  
  17. to make sure we haven't added extra keys that you weren't expecting.
  18.  
  19. [root@server2 .ssh]# cat id_rsa.pub
  20.  
  21. ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAriu15Mg0+5AiZa0pp2/mOPre9T9JtNuwKCEX4OC6bDWd/FbXScUO7Nu/I6gLtToGiAoId9nucysHOvPIiqoKiRq7E6exueWzJkFj09RrndzW2XKwKlHzTIvBAuyp9fOT4nVauiu3UbdkyyRTiwgo5Ze5amlJlrr7tT3/f3JyOlVICPsebSm4eN2t0t8+6f/CwkhsGiHHMwVzrPp9oixnkVetYi1pDjCFxCQS2Q/eBPaC58HopcUqpkWMpw8imoud8oL7+zcypPVoUP8RqeOq/of0tqgNbsMpOcDxPiFyh6UMjaGotDGCHKFNpZerJzzmmevCkUNtF2bzIhUctadkZQ== root@server2
  22.  
  23. ###在客户端查看,发现新产生了一个authorized_keys ,里面内容和公钥的一样,以后再加的话会自动在这个文件里追加内容###
  24.  
  25. [root@server4 .ssh]# ls
  26.  
  27. authorized_keys known_hosts
  28.  
  29. [root@server4 .ssh]# cat authorized_keys
  30.  
  31. ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAriu15Mg0+5AiZa0pp2/mOPre9T9JtNuwKCEX4OC6bDWd/FbXScUO7Nu/I6gLtToGiAoId9nucysHOvPIiqoKiRq7E6exueWzJkFj09RrndzW2XKwKlHzTIvBAuyp9fOT4nVauiu3UbdkyyRTiwgo5Ze5amlJlrr7tT3/f3JyOlVICPsebSm4eN2t0t8+6f/CwkhsGiHHMwVzrPp9oixnkVetYi1pDjCFxCQS2Q/eBPaC58HopcUqpkWMpw8imoud8oL7+zcypPVoUP8RqeOq/of0tqgNbsMpOcDxPiFyh6UMjaGotDGCHKFNpZerJzzmmevCkUNtF2bzIhUctadkZQ== root@server2
  32.  
  33. 注:在RHEL4里没有ssh-copy-id 这个命令,可以用
  34.  
  35. #~/.ssh/cat id_dsa.pub| ssh 192.168.12.1 "cat > ~/.ssh/authorized_keys" 代替

验证
在客户端

  1. [root@server2 .ssh]# ssh 192.168.12.1
  2.  
  3. Enter passphrase for key '/root/.ssh/id_rsa': ###输的是私钥的密码,而不是server端的密码###
  4.  
  5. Last login: Fri Oct :: from server2..com

但这只是以root身份登录才会免密码,如果以其他用户身份登录还是会要求输入密码,不用以上密码加密和解密的过程。

二,ssh-agent(客户端上)

通过上面的实验我们发现虽然加了私钥密码很安全,但是每次连接都要输私钥密码就会很麻烦,所以可以通过代理的方式使私钥只要解密一次,就会把它加载在内存里,以后登录的时候就不用输入密码了

但这只在该新起的shell中生效

  1. [root@server2 .ssh]# ssh-agent /bin/bash
  2.  
  3. ###[root@server2 .ssh]# ssh-agent $SHELL也可以,因为
  4.  
  5. [root@server2 .ssh]# echo $SHELL
  6.  
  7. /bin/bash

如果要起图形界面#ssh-agent /usr/bin/gnome-terminal

###

  1. [root@server2 .ssh]# ssh-add ###将私钥导入内存,输入解密密码###
  2.  
  3. Enter passphrase for /root/.ssh/id_rsa:
  4.  
  5. Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
  6.  
  7. [root@server2 .ssh]# ps
  8.  
  9. PID TTY TIME CMD
  10.  
  11. pts/ :: bash
  12.  
  13. pts/ :: bash
  14.  
  15. pts/ :: ps
  16.  
  17. 注:如果不新开一个shell 在加入内存时会出现以下报错
  18.  
  19. [root@server2 .ssh]# ssh-add
  20.  
  21. Could not open a connection to your authentication agent.

无密码登陆的ssh和ssh-agent的更多相关文章

  1. SSH无密码登陆问题解决

    转载 http://my.oschina.net/hunzi/blog/10687 安装好Cygwin后,SSH需要设置为无密码登陆, 首先查看是ssh还是ssh2:ls -l `which ssh` ...

  2. 解决root用户ssh配置无密码登陆/hadoop用户照仿可以实现相同功能:hadoop用户登录并且把命令的所有root换成home/hadoop

    http://inuyasha1027.blog.51cto.com/4003695/1132896/ 主机ip:192.168.163.100(hostname: node0) ssh无密码登陆的远 ...

  3. 烂泥:学习ssh之ssh无密码登陆

    本文由秀依林枫提供友情赞助,首发于烂泥行天下 最近一个月没有写过文章,主要是刚刚换的新工作.新公司服务器OS使用的是ubuntu server版,和以前熟悉的centos还是有很多不同的. 刚好这几天 ...

  4. Linux设置ssh无密码登陆

    最近在折腾Hadoop,要用到主机间无密码登陆,设置的时候遇到了一些问题,这里记录一下. 假设A需要无密码登陆B. 那么首先需要在A上使用ssh-keygen生成id_rsa.pub的公钥,生成时,一 ...

  5. 18.ssh远程双向无密码登陆

    #ssh远程双向无密码登陆 需求:在192.168.10.100执行ssh 192.168.20.205不需要输入密码直接跳转到205机器 #在192.168.10.100执行命令,我这里使用root ...

  6. [SSH服务]——一个SSH无密码登陆实验

    实验拓扑图 实验描述 机房内有两台服务器: (1)B服务器10.0.10.158,充当Web服务器,有普通用户user_00 (2)C服务器10.0.10.191,充当Mysql服务器,有普通用户us ...

  7. linux ssh 无密码登陆

    要点:有时候ssh localhost 无法登陆本机,但各种设置都正确.重启下就好了...... 参考地址:http://bbs.csdn.net/topics/370109654 三台机器实现互相之 ...

  8. 批量设置ssh无密码登陆脚本

    最近要给集群设置ssh无密码登陆,如果需要手动设置这个无密码登陆,所以在网上找了几个脚本,亲测下面这个好使,并且设置比较简单. 需要用root账户执行,我也是要给root账户设置无密码登陆. 首先我们 ...

  9. ssh和ssh-copy-id以及批量多机无密码登陆详解

    本文主要围绕着ssh服务以及如何通过ssh-copy-id实现无密码登陆. 1. sshd 服务以及配置   2.ssh-copy-id命令的使用以及原理.3.批量多机互相信任. 1. sshd 服务 ...

  10. ssh无密码登陆远程机,pssh轻批量工具

    #B(client)--------A(g_server)#A:   ssh-keygen -t rsa (g_server)#B:    scp -P 58422 root@g_server_ip: ...

随机推荐

  1. vue 项目中assets文件夹与static文件夹引用的区别

    首先,assets文件夹和static文件夹在vue-cli生成的项目中,都是用来存放静态资源的. 1.assets目录中的文件会被webpack处理解析为模块依赖,只支持相对路径形式.build的时 ...

  2. Mysql之正则匹配

    Regex与Like的关系Mysql中我们经常会用到正则表达式就是Like filed like '%?%' .但是有时对于一些复杂场景下的正则过滤,单单一个like就显得有些力不从心了 Regex的 ...

  3. 跨域问题-nginx代理

    有时候我们跨域是借助了浏览器对 Access-Control-Allow-Origin 的支持.但有些浏览器是不支持的,所以这并非是最佳方案现在我们来利用nginx 通过反向代理 满足浏览器的同源策略 ...

  4. 学会JS的this这一篇就够了

    转自:http://www.imooc.com/article/1758 以前看某本书上讲: 掌握了JS中this的用法才算真正的跨过了JS的门槛 我深以为是!但是JS的this却并不是那么简单的内容 ...

  5. 初探Nginx服务器的整体架构

    高度模块化的设计是 Nginx 的架构基础.Nginx 服务器被分解为多个模块,每个模块就是一个功能模块,只负责自身的功能,模块之间严格遵循“高内聚,低耦合”的原则. 核心模块 核心模块是 Nginx ...

  6. 『NiFi 自定义 Processor 无法获取到 Logger』问题解决

    一.概述 自定义的 Processor 继承了 AbstractProcessor,而 AbstractProcessor 继承了 AbstractSessionFactoryProcessor ,g ...

  7. [CLR via C#读后整理]-1.CLR的执行模型

    公共语言运行时(Common Language Runtime,CLR)是一个可由多种编程语言使用的"运行时".他主要提供的功能有:程序集加载,内存管理,,安全性,异常处理,线程同 ...

  8. svn不提交.net项目中的bin

    1 选中 bin->右击->tortoiseSVN->add to ignore list->选择第二个 2 提交 , 服务器上就没有bin目录了.

  9. encoder-decoder环境部署问题

    pip -v    2.7 cp -r pip2.7 pip pip list appdirs (1.4.3)cycler (0.10.0)distribute (0.7.3)extern (0.1. ...

  10. 20145240《网络对抗》Web安全基础实践

    Web安全基础实践 实验后回答问题 (1)SQL注入攻击原理,如何防御 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语 ...