SSH 免密连接

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的原理终于实现了免密登陆,这下部署博客就很简单了。出现问题时,不要着急立刻解决还是去了解下背后的原理,再操作比较有效率。

文章目录
  1. 1. SSH 免密连接
    1. 1.1. 什么是SSH?
    2. 1.2. 基本的用法
    3. 1.3. 免密登陆
    4. 1.4. 使用口令短语
    5. 1.5. 增加口令短语
    6. 1.6. dog/god说
|