原文地址: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对钥匙。

[root@server1 ssh]# service sshd restartStopping sshd: [ OK ]Generating SSH1 RSA host key: [ OK ]Generating SSH2 RSA host key: [ OK ]Generating SSH2 DSA host key: [ OK ]Starting sshd:

[root@server1 ssh]# ls (/etc/ssh)moduli ssh_host_dsa_key ssh_host_key.pubssh_config ssh_host_dsa_key.pub ssh_host_rsa_keysshd_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,

[root@server2 ~]# rm -fr .ssh/known_hosts[root@server2 ~]# ls .ssh/[root@server2 ~]# ssh ###如果在连某个主机的时候know_hosts里面没有记录,则在ssh的时候会弹出对话并在里面添加这条记录,这样下次再连的时候就不会再询问###The authenticity of host '192.168.12.1 (192.168.12.1)' can't be established.

RSA key fingerprint is cf:ea:07:39:9b:fb:04:76:7e:c5:73:0b:97:fb:06:db.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '192.168.12.1' (RSA) to the list of known hosts.root@192.168.12.1's password:

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

[root@server4 ~]# ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub2048 cf:ea:07:39:9b:fb:04:76:7e:c5:73:0b:97:fb:06:db /etc/ssh/ssh_host_rsa_key.pub[root@server4 ~]# ssh-keygen -lf /etc/ssh/ssh_host_rsa_key2048 cf:ea:07:39:9b:fb:04:76:7e:c5:73:0b:97:fb:06:db /etc/ssh/ssh_host_rsa_key.pub

[root@server2 ~]# cat .ssh/known_hosts192.168.12.1 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvPOQ0LmlgrE15e37+eL2fGXGAbUaSr1BI5nWFjXc/pdN3MbGIPBDWnKryIke6gR3wxag72IZ5ZmXQ0VQ6CPBD/lumAo0Ymq2B70l9eyxri8j++O+DbQVmFMJ3aGgr2qf70NXC1I+C22i6Chfx2gWTm9rtDDa/5fYrXseqGlM+EhG7MgC2bIkcAweboDejd+4wet0Kgp0YSl+QVlqbsTMJi4fvhIt/n95+CzJFhp0uOcRvFvIuW+wGM3b7Tg7O3r6VzNBZJM27LHuoWRItHuFpkitT58fsp3aBkIeNR22V65SY/5ICO2ywz0QCYZAz4gcjFsEAGKqL1GqdwTkuN+QAQ==

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

客户端产生密钥对

[root@server2 ~]# ssh-keygen -t rsaGenerating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa):Enter passphrase (empty for no passphrase): ###这是对产生的私钥进行加密###Enter same passphrase again:Your identification has been saved in /root/.ssh/id_rsa. ###客户端的私钥###Your public key has been saved in /root/.ssh/id_rsa.pub. ###客户端的公钥###The key fingerprint is:ed:af:64:8c:14:18:0c:97:36:54:b5:e1:35:dc:83:5c root@server2

[root@server2 ~]# cd .ssh/[root@server2 .ssh]# lsid_rsa id_rsa.pub known_hosts ###客户端产生的密钥对存在这下面######把客户端的公钥传给客户端###[root@server2 .ssh]# ssh-copy-id -i id_rsa.pub 192.168.12.110root@192.168.12.1's password:

Now try logging into the machine, with "ssh '192.168.12.1'", and check in:.ssh/authorized_keysto make sure we haven't added extra keys that you weren't expecting.[root@server2 .ssh]# cat id_rsa.pubssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAriu15Mg0+5AiZa0pp2/mOPre9T9JtNuwKCEX4OC6bDWd/FbXScUO7Nu/I6gLtToGiAoId9nucysHOvPIiqoKiRq7E6exueWzJkFj09RrndzW2XKwKlHzTIvBAuyp9fOT4nVauiu3UbdkyyRTiwgo5Ze5amlJlrr7tT3/f3JyOlVICPsebSm4eN2t0t8+6f/CwkhsGiHHMwVzrPp9oixnkVetYi1pDjCFxCQS2Q/eBPaC58HopcUqpkWMpw8imoud8oL7+zcypPVoUP8RqeOq/of0tqgNbsMpOcDxPiFyh6UMjaGotDGCHKFNpZerJzzmmevCkUNtF2bzIhUctadkZQ== root@server2###在客户端查看,发现新产生了一个authorized_keys ,里面内容和公钥的一样,以后再加的话会自动在这个文件里追加内容###[root@server4 .ssh]# lsauthorized_keys known_hosts[root@server4 .ssh]# cat authorized_keysssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAriu15Mg0+5AiZa0pp2/mOPre9T9JtNuwKCEX4OC6bDWd/FbXScUO7Nu/I6gLtToGiAoId9nucysHOvPIiqoKiRq7E6exueWzJkFj09RrndzW2XKwKlHzTIvBAuyp9fOT4nVauiu3UbdkyyRTiwgo5Ze5amlJlrr7tT3/f3JyOlVICPsebSm4eN2t0t8+6f/CwkhsGiHHMwVzrPp9oixnkVetYi1pDjCFxCQS2Q/eBPaC58HopcUqpkWMpw8imoud8oL7+zcypPVoUP8RqeOq/of0tqgNbsMpOcDxPiFyh6UMjaGotDGCHKFNpZerJzzmmevCkUNtF2bzIhUctadkZQ== root@server2注:在RHEL4里没有ssh-copy-id 这个命令,可以用#~/.ssh/cat id_dsa.pub| ssh 192.168.12.1 "cat > ~/.ssh/authorized_keys" 代替

验证
在客户端

[root@server2 .ssh]# ssh 192.168.12.1Enter passphrase for key '/root/.ssh/id_rsa': ###输的是私钥的密码,而不是server端的密码###Last login: Fri Oct 30 05:33:58 2009 from server2.163.com

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

二,ssh-agent(客户端上)

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

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

[root@server2 .ssh]# ssh-agent /bin/bash###[root@server2 .ssh]# ssh-agent $SHELL也可以,因为[root@server2 .ssh]# echo $SHELL/bin/bash

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

###

[root@server2 .ssh]# ssh-add ###将私钥导入内存,输入解密密码###Enter passphrase for /root/.ssh/id_rsa:Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)[root@server2 .ssh]# psPID TTY TIME CMD14758 pts/1 00:00:00 bash14978 pts/1 00:00:00 bash14993 pts/1 00:00:00 ps注:如果不新开一个shell 在加入内存时会出现以下报错[root@server2 .ssh]# ssh-addCould not open a connection to your authentication agent.

转载于:https://www.cnblogs.com/wanstack/p/7249930.html

无密码登陆的ssh和ssh-agent相关推荐

  1. Linux配置SSH无密码登陆

    可以使用"公钥私钥"认证的方式来进行ssh登录. 所谓 "公钥私钥"认证方式,就是首先在客户机上创建一对公钥和私钥,公钥文件:~/.ssh/id_rsa.pub ...

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

    本文首发于烂泥行天下 最近一个月没有写过文章,主要是刚刚换的新工作.新公司服务器OS使用的是ubuntu server版,和以前熟悉的centos还是有很多不同的. 刚好这几天有时间,也是工作需要,学 ...

  3. ssh 配置:在 Linux 中 ssh 配置无密码登陆完整步骤以及易错点分析

    文章目录 前言 一.什么是 SSH? 二.ssh 配置无密码登陆原理 三.Linux 系统上生成 SSH 密钥和公钥 四.登录验证 总结 前言 对于 Hadoop 的伪分布式和全分布式而言,Hadoo ...

  4. CentOS 6.3用ssh无密码登陆其它主机

    我们现有4台计算机A.B.C.D,现要求A能够无密码登陆到B.C.D,步骤如下: 在A.B.C.D主机上安装ssh,即 yum install ssh 在A.B.C.D上安装ssh客户端 yum in ...

  5. CentOS-5.6-x86_64 配置SSH无密码登陆

    昨天弄oracle的备份,脚本中用到了scp,需要把服务器的数据cp到备份服务器上,需要配置oracle数据库服务器可以通过db_backup用户无密码登陆到备份服务器上,随便把ssh无密码登陆的配置 ...

  6. 大规模集群自动化部署SSH无密码登陆

    大家需要在每个节点上提前装好"expect"工具 expect的使用请看我的另一篇文章: http://tianxingzhe.blog.51cto.com/3390077/168 ...

  7. 2.修改/etc/hosts文件 /安装SSH、配置SSH无密码登陆(全程切换到hadoop用户下操作)

    修改/etc/hosts文件 sudo gedit /etc/hosts127.0.0.1 localhost 192.168.222.129 master 下面分别对应三个机器的IP地址,用ifco ...

  8. [ssh config]ssh登陆信息配置

    当你需要经常登陆到远程服务器上进行操作的时候,SSH链接是一个跳不过去的话题. 当你需要链接的服务器相对较少的时候,你可以直接记忆下对应的ip和相关信息,但是随着你需要关注的服务器越来越多,你会发现i ...

  9. 远程登陆(telnet、ssh、ftp)

    1.telnet:telnet客户端和服务器基于TCP连接来传输命令,服务器默认通过端口23与客户端建立telnet连接 22端口通常是远程登录服务器用的 telnet以客户端/服务器模式运行 ① A ...

  10. ubuntu root下的无密码登陆

    2019独角兽企业重金招聘Python工程师标准>>> 以前都是两台机器在普通用户之间无密码登陆,今天两台机器都是root下配置无密码登陆,方法很简单,写下过程: 注:以root下节 ...

最新文章

  1. 在CentOS 6.9上从源码安装Go 1.10
  2. 嵌入式JavaScript脚本解释器的研究与实现
  3. python如何取消缩进_python如何处理缩进
  4. python英文语义角色标注_八款中文词性标注工具使用及在线测试
  5. 当当创始人李国庆谈吴秀波事件:呼吁释放陈昱霖 应核查税收
  6. 【最详细解析】1070 结绳 (25分)_18行代码AC
  7. MySQL 读写分离 使用驱动com.mysql.jdbc.ReplicationDriver
  8. php dm,DM_cp.php
  9. 集合练习。学生信息包括学号、姓名、出生日期、性别。把N个学生的信息放入一个集合中。可以根据学号,对学生信息进行检索。并可以根据生日进行排序输出。
  10. centos 7的systemctl
  11. bootdo框架首页解析
  12. 海思平台35xx系列sensor不出图问题排查方法(新手来看)
  13. solidity 0.5.7简明教程
  14. 「 软件安装 」嵌入式开发Keil5安装教程
  15. java算法编程题:某年某月某日是这一年的第几天
  16. 谈谈对springioc的理解
  17. java cookie能存到服务器_Cookie技术用于将会话过程中的数据保存到( )中,从而使浏览器和服务器可以更好地进行数据交互。(5.0分)_学小易找答案...
  18. 高等数学极限运算法则
  19. 月薪3000与月薪30000的文案区别
  20. rk3288 原子操作和原子位操作

热门文章

  1. 超详细一文到底!软件测试基本流程
  2. 11、可观测性--告警质量
  3. ATECC508A芯片开发笔记(八):ECDH算法配置方法、执行过程及实现原理
  4. MSA多序列比对(multiple sequence alignment)
  5. objective c 函数声明
  6. python大学生生活信息交互平台的设计与实现毕业设计源码031315
  7. 微信小程序如何在后端获取openId?
  8. linux虚拟机和主机的文件拷贝
  9. 财经观察:“脱欧”不确定性持续拖累英国经济
  10. 自适应波束形成(二)——时域窄带LCMV波束形成器