https://www.cnblogs.com/leien/p/5375780.html
http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html
配置hadoop的过程中涉及到ssh免密登陆,但是ssh localhost一直登陆不上去。
查了好多资料,越查越杂,终于碰到一个及其简明的流程,搞定,先记录,ssh的工作原理在http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html这篇博客中写的很清楚,依靠自己的理解重述如下:
首先ssh的出现是为了解决两台计算机通信时明文的数据加密问题
一般使用格式: ssh user@host 含义:以用户名user登陆远程主机host。当以用户登陆本地主机就变成了:ssh user@localhost 如果本地用户名与远程用户名一致,登陆时可省略用户名ssh host,对于本地来说, 也就是直接 ssh localhost (此外还涉及到端口的问题,默认端口是22)
通信的过程分两大块:一:确认我们将登陆的主机确实是我们想要登陆的主机.二,免密
对于一:为了防止中间人攻击,我们在第一次登陆远程主机host的时候,会弹出确认信息:大致意思是:不知道对方的确切信息,只知道有个指纹,(通常网站会贴出来,只能由用户自己确认)连不连?连!那么就把远程host的fingerprint存在了本机的¥HOME/.ssh/known_hosts中,从此以后登陆该远程主机就不用再看确认信息了。
对于二:
虽然不用确认信息,但是每次还要输入密码也很讨厌,于是呢公钥登陆就出现了,
原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
前提是:用户需要将自己的公钥交给远程host,此前要先生成一个 ssh-keygen -t dsa -p ' ' -f ~/.ssh/id_dsa 这样在本地的。ssh目录下就会有两个文件:id_dsa.pub id_dsa 一个公钥一个私钥,上传的话就是ssh-copy-id user@host或者手动拷贝都行了,远程主机会把所有收集到的公钥放在远程主机登录后的用户目录的home/.ssh/authorized_keys中,每多一个就放在队尾就是了。这样就搞定了ssh的工作。
对于linux登陆本地免密的操作就是:先安装ssh,然后ssh localhost添加指纹,然后生成密钥,然后把公钥复制到同文件夹下的authorized_keys文件队尾。搞定。
当然中间可能会遇到文件夹权限之类的问题,众说纷纭,先不管,沼泽地里先趟出一条路再说。
wh@vm1-ubuntu:~$ sudo apt-get install ssh
wh@vm1-ubuntu:~$ ssh localhost
wh@vm1-ubuntu:~$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
wh@vm1-ubuntu:~$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
wh@vm1-ubuntu:~$ ssh localhost