iterm2下管理ssh的几点经验

工作了之后经常和服务器打交道,自己也搭了好几个虚拟机用于开发。那么,问题来了:如何有效地管理ssh呢?

一开始,我秉承着“好记性不如烂笔头的”的执念,把每个虚拟机的登录方式记在笔记上,每次登录的时候都要先去印象笔记中搜一下,然后复制粘贴。可想而知这样的效率有多低。为了更好地投身工作,节约ssh浪费的时间,我开始搜寻更有效率的方法。

奋笔疾书

基础工具Iterm2

为了更方便的管理多个SSH,最基础的工具Iterm2登场了。它的profiles配置可以方面地为我们提供多ssh登陆信息保存的功能。具体配置如下图所示。

配置方法:在Iterm2->Prefenerce->Profiles,中添加新的Profiles,并填入相应的name和Tags,Tags可以为你提供分组服务,便于快速的找到该profiles。最关键的步骤是在Command一栏中,填上你登录ssh的指令,如下所示:

1
ssh [email protected]192.168.2.235

这样一来,每次登录该服务器的时候,只需要点击对应的Profiles即可。

进阶sshpass

Iterm2的Profiles能很好的解决多ssh登陆信息保存的问题,但是,一旦服务器多了,记密码貌似也是件及其烦心的事。别急,sshpass能帮我们解决。

安装sshpass

在Macos下,通过以下命令来安装sshpass:

1
brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb

执行完成后,通过sshpass -h命令来检查是否安装正确。

设置密码文件

通过sshpass来使用ssh密码,需要事先将密码保存在一个文件里,再通过sshpass命令来读取文件中保存的密码。密码文件很简单,例如,在/user/用户名/sshpass目录下新建一个pass文件,里面写上主机密码,如123456,即可。

配置Iterm2

在Iterm2中更改Profiles的配置,将Command一栏改为如下:

1
/usr/local/bin/sshpass -f /Users/zhangcheng/sshpass/pass ssh -p22 [email protected]

保存该Profiles,下次登录的时候只需要以该Profiles打开Iterm2即可。是不是感觉节省了很多时间。

高阶ForwardAgent or ProxyCommand?

在公司,一般登录线上服务器需要先登录跳板机,在通过跳板机来登录线上服务器。对于Key Pair登录,通常的做法是将Key Pair存放在跳板机上,这样安全性得不到保证。最初我也是这么做,后来被运维“骂”了一通后,“被迫”使用了ForwardAgent。

SSH ForwardAgent可以让开发者将Local端的SSH Key Pair带到另一台机器上,这样一来你就不用讲SSH Key复制到跳板机在进行跳板动作了,同样,跳板机也仅仅只是跳板机了,不需要存放任何凭证资料,你的个人Key Pair也得到了安全性保障。

ForwardAgent

使用SSH的ForwardAgent很简单,包括了如下几个步骤:(假设跳板机IP为1.1.1.1,远端服务器为2.2.2.2,端口为1046)

  • 将Key Pair放到清单

通过ssh-add命令可以将你的Private Key Pair加入清单

1
ssh-add ~/.ssh/id_ras

然后通过以下命令可以查看上述命令是否执行成功。

1
ssh-add -L

  • 设定~/.ssh/config

在本机的ssh config文件中,需要配置ForwardAgent参数,如下:

1
2
3
4
5
Host hosta
HostName 1.1.1.1
User username
ForwardAgent yes
IdentityFile ~/.ssh/id_rsa // 指定私钥

同样在跳板机上也需要配置config文件,如下:

1
2
3
4
Host hostb
HostName 2.2.2.2
User username
ForwardAgent yes

上述配置完成后,在本机即可通过ssh -A指令登录到跳板机,如下:

1
ssh -A -p 1046 [email protected]

登录到跳板机之后,同样通过以下指令,登录到线上机器:

1
ssh -A -p 1046 [email protected]

上述步骤下来,私钥不需要上传到跳板机,保证了安全性,但是两遍ssh操作,还是太费事。而且,通过ssh-add操作还是存在安全隐患,具体可以看这篇文章SSH Agent Forwarding considered harmful

ProxyCommand

ProxyCommand不仅不需要将私钥ssh-add加入到ssh清单中,而且也简化了登录步骤,只需要一条指令直接登录到线上服务器。

该方法也是需要配置~/.ssh/config文件,但是是通过ProxyCommand而不是ForwardAgent yes。

1
2
3
4
5
6
7
8
9
10
Host Hosta
User username
Hostname 1.1.1.1
Host Hostb
User username
Hostname 2.2.2.2
Port 1046
ProxyCommand ssh -q -W %h:%p hosta
IdentityFile ~/.ssh/id_rsa

这样一来只需要一条指令即可直达线上机器

1
ssh hostb

实在是省时省力又省心啊!!!!不知道大家会了没有呢?

参考

SSH agent forwarding 教學
SSH穿越跳板机:一条命令跨越跳板机直接登陆远程计算机

支持一下!