mac系统使用iTerm2和ssh使用别名免密登录远程服务器

一、ssh登录远程服务器

今天分享一篇实用功能,我们在工作中经常需要连接远程服务器,查日志,查性能瓶颈等等,那么除了使用客户端工具外,我们最常用的就是使用SSH方式连接了,SSH之所以能够保证安全,原因在于它采用了公钥加密。那么乡亲们知道ssh密码的登录过程是怎样的吗?

ssh密码登录过程:

  • 用户使用命令 ssh user@host或者ssh -p port user@host 向远程主机发登录请求;
  • 远程主机收到登录请求以后把自己的公钥发给用户。
  • 用户使用这个公钥,将登录密码加密后,发送回远程主机。
  • 远程主机用自己的私钥,将用户输入的登录密码解密,如果密码正确,用户登录成功。

如果是第一次连接登录远程主机,会出现下面的警告:

意思是无法确认目标主机的真实性,只知道公钥指纹,问你是否还要继续连接?我们选择yes之后,又会提示一个Warning,这个提示的意思是,目标主机已经得到认可,然后就需要你输入密码,密码正确,就可以连接远程主机。

下一个问题,为什么你输入yes之后,下次再登录就不会再出现这个提示了?

因为在你输入yes,也就是接受远程主机的公钥之后,它会被保存在文件~/.ssh/known_hosts中,下次当你再请求连接时,目标主机会认识这个公钥被保存过,所以就会跳过警告部分,直接让你输入密码。

每个ssh用户都有自己的know_hosts文件,我们进入~/.ssh/中看一下是否添加了目标主机的公钥

可以看到刚才选择yes之后,远程主机的公钥已经存在我们的know_hosts中了。

二、ssh免密登录远程服务器

我们每次连接远程服务器的时候都需要输入密码,不厌其烦,所以我们就想着能不能只要使用ssh user@host就可以直接免密登录,答案当然是可以的,所谓的免密登录,其实就是使用ssh公钥登录,下面来看。

1、生成公钥和私钥

ssh-keygen -t rsa -C '你的邮箱'

命令解释:

  • ssh-keygen : 生成公钥(其实只输入这个命令就可以生成公钥了)
  • -t rsa : 秘钥的类型(这里是rsa)
  • -C '你的邮箱' :用户识别秘钥的注释(不一定是邮箱,可以是任何内容,默认是生成秘钥所在的宿主机用户名)

然后一路"Enter"下去:

最后会在 ~/.ssh 目录下生成两个文件 id_rsa.pub和id_rsa ,前者是公钥,后者是私钥,可以查看一下公钥,如图:

2、设置免密登录(公钥登录)

公钥生成后,在终端输入下面的命令

ssh-copy-id -i ~/.ssh/id_rsa.pub 服务器主机用户名@服务器地址

可以发现公钥已经添加到目标主机,我们来验证下:

3、问题汇总

  1. 公钥拷贝到目标主机可以通过ssh-copy-id -i命令,可以手动拷贝,自己登录到目标主机,把id_rsa.pub的内容粘贴到目标主机的.ssh/authorized_keys文件中,若该文件不存在,需要手动创建。
  2. 如果上面两个方法还是不能免密登录,就去到目标主机的/etc/ssh/sshd_config这个文件,检查下面几行前面的"#"注释是否取掉。
RSAAuthentication yes   
PubkeyAuthentication yes   
AuthorizedKeysFile .ssh/authorized\_keys

4、原理解释

公钥登录是为了解决每次登录服务器都要输入密码的问题,流行使用RSA加密方案,主要流程包含:

    1、客户端生成RSA公钥和私钥

    2、客户端将自己的公钥存放到服务器

    3、客户端请求连接服务器,服务器将一个随机字符串发送给客户端

    4、客户端根据自己的私钥加密这个随机字符串之后再发送给服务器

    5、服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。这样就不用使用密码了。

三、ssh使用别名免密登录远程服务器

远程登录服务器,除了每次输入密码以外,每次ssh  服务器用户名@服务器地址  也很麻烦,而且也不容易记住,如果我们能自己定义一个别名,每次只要ssh 别名,就能直接免密登录,那该多好!别急,这也很简单,下面来看。

上面我们看到~/.ssh下面有一个config文件,如果你没有就创建一个,我们使用 vim ~/.ssh/config 命令编辑这个文件,添加如下内容:

#服务器别名
Host mzc
#服务器地址
HostName 服务器地址
#服务器用户名
User root
#端口(如果有必要)
Port 22

我里面本来就添加了几个,现在我再为上面示例中的阿里云服务器加个mzc的别名,如下图所示:

验证一下:

好了,这样就可以实现使用别名免密登录了。

四、使用iTerm2的Profiles快捷登录ssh

上面其实已经讲完了ssh使用别名免密登录远程服务器的所有步骤了,只要跟着做下来的,一定能成功。可是这时候,有的乡亲们又问了,如果我连ssh 别名 都不想输入呢?WTF?果然懒得清醒脱俗,都说懒人的想象力与创造力都惊为天人,我服,既然这样了,那就别怪我秀了,巧了,这个问题我又会了,没想到吧!

下面就跟大家讲一下真香系列之使用iTerm2的Profiles快捷登录远程服务器。

1、本地创建一个存放脚本文件的目录

cd /Users/moore/Documentsmkdir Scripttouch ssh_mzc

上面的ssh_mzc就是我创建的脚本文件,你可以自己命名。

2、编辑脚本

vim ssh_mzc

在脚本文件中输入下面的脚本:

#!/usr/bin/expect

set PORT 22
set HOST 你的远程服务器地址
set USER 服务器用户名
set PASSWORD 服务器登录密码

spawn ssh -p $PORT $USER@$HOST
expect {
        "yes/no" {send "yes\r";exp_continue;}
         "*password:*" { send "$PASSWORD\r" }
        }
interact

然后esc,wq保存退出,cat一下:

3、设置iTerm

点击 iTerm2 ——> Preferences,选择Profiles,然后按照下面的6个步骤操作:

  1. 点击Profiles
  2. 点击左下角的+号
  3. 输入Name,自定义
  4. 输入Tags,自定义
  5. Command下拉框选择Command
  6. 命令输入 expect 上面创建的脚本文件路径

好了,到这儿准备工作就全部完成了。

4、验证

使用快捷键command+O,双击刚才设定的profile,就快速连接登录远程服务器了。

或者,在菜单栏点击Profiles,也可以看到刚才创建的profile,选择后也能快速连接登录上远程服务器。

好了,本篇文章就讲到这里了,我们说了远程连接服务器的原理,也说了免密登录的原理和步骤,接下来又讲解了ssh使用别名免密登录的操作,最后又说到了如何使用iTerm2快速连接登录远程服务器,应该能解决乡亲们大多数的需求了,欢迎留言讨论,如果对你有帮助,可以关注一下我的公众号“码之初”,就是对我最大的支持了,谢谢乡亲们!

发布了23 篇原创文章 · 获赞 12 · 访问量 5769

猜你喜欢

转载自blog.csdn.net/u013469325/article/details/105241216