SSH 免密连接
什么是SSH?
简单说,SSH是一种网络协议,用于计算机之间的加密登录。
如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的(所以叫 Secure Shell 啊),即使被中途截获,密码也不会泄露。
比如在Windows端常用的有SSH工具有PuTTy,但是个人觉得界面太丑,果断还是MobaXterm好用又美观。Linux 一般自带的是OpenSSH,可以通过ssh -V 查看版本。在Andriod 端好用的有JuiceSSH。
基本的用法
SSH主要用于远程登录。假定你要以用户名user,登录远程主机host,只要一条简单命令就可以了。
$ ssh user@host
如果本地用户名与远程用户名一致,登录时可以省略用户名。
$ ssh host
SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。
$ ssh -p 2222 user@host
免密登陆
目标主机 ubuntu 16.04
本地主机 Windows
在本地主机打开git shell
ssh-keygen - t rsa
生成公共(id_rsa.pub) / 私有 rsa(id_rsa) 密钥对
复制公钥到目标服务器,然后就可以无密码登录了
ssh-copy-id hexo@服务器IP
这固然方便,但是网上教程中在ssh-keygen创建密钥的时候,
“Enter passphrase (empty for no passphrase):”
和下一行
“Enter same passphrase again:”
两处都是直接回车,就是说没有创建口令短语(passphrase)。
使用口令短语
我们把目标主机的 /root/.ssh/authorized_keys 移走,在操作主机上 重新 生成一对儿密钥,这回加上口令短语(至少5个字符),再ssh-copy-id 到目标主机,试试连接:
[root@centos7-cn ~]# ssh root@192.168.150.110
Enter passphrase for key '/root/.ssh/id_rsa': <输入正确的口令短语>
Last login: Tue Oct 28 11:46:56 2014 from 192.168.150.76
[root@centos7 ~]#
必须输入正确的口令短语才能登录目标主机。
增加口令短语
那么在生产环境里,已经部署了不带口令短语的密钥,怎么增加口令短语呢?这样
[root@centos7-cn ~]# ssh-keygen -p
Enter file in which the key is (/root/.ssh/id_rsa):
Key has comment '/root/.ssh/id_rsa'
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.
这时候再试试连接目标主机,除了需要输入口令短语,登录服务器依旧不需要密码。
但是仅仅增加口令短语并不能解决问题,因为改动的是操作主机上的id_rsa文件(私钥),目标主机上保存的是毫无变化的公钥,原来未加口令的私钥依然有效!!
所以没有办法了, 增加口令没有太多实际意义 。必须删除目标主机原有的公钥(保存在目标主机的 /root/.ssh/authorized_keys),删除操作主机旧的密钥并重新生成一套带口令的,再ssh-copy-id到目标主机。这可能是个浩大的工程。。。
ssh-keygen -p 选项也可以修改口令短语,只是在输入新口令之前需要先输入旧口令。
dog/god说
之前折腾了好久也没有弄清楚目标主机和本地主机的关系,仔细看了下ssh的原理终于实现了免密登陆,这下部署博客就很简单了。出现问题时,不要着急立刻解决还是去了解下背后的原理,再操作比较有效率。