使用ssh config配置文件来管理ssh连接
我本人其实及其烦使用配置文件这种东西,有时候看到巨大又复杂的配置文件,甚至复杂过代码的时候,总感觉设计配置文件的人有些本末倒置。
但是ssh这个配置文件真的非常简单好用,让我稍微体验了一次配置文件使用的快感。
在使用ssh confg之前我大概是这样设置和管理自己的ssh连接的。
首先条线一个集中的地方,比如我自己在桌面上创建一个sa的文件夹,然后在这个文件夹里面放上自己经常连接的服务器的连接命令做成一个脚本类似名字叫
ssh-redis
#!/bin/sh ssh piperck@115.28.39.64 -p 22
做一个shell脚本,里面放上想要ssh的地址。然后把这个sa文件夹设置到环境变量中,使得可以在terminal的任意地方调用到他们。
因为我自己使用的zsh所以在我的.zshrc里面设置上这个文件夹的路径
export PATH="/Users/piperck/Desktop/tools/sa:$PATH"
然后重新开个shell 就可以在任何地方输入ssh-redis方便的登陆到目标服务器上面了。
除了上面这个办法,当然你也可以选择在.zshrc 或者 .bashrc里面使用Alias指定一个 ssh登陆的代号作为命令的名字从而执行命令比如
Alias dev "ssh www.xiachufang.com -p 22"
其实这样已经非常方便了我觉得,但是作为懒癌晚期程序员每次遇到新服务器需要配置的时候,都觉得这种添加脚本的方法巨麻烦,而且文件夹里面的脚本会越来越多。有没有更优雅的方法可以干这个事儿?
ssh config配置文件可以解决这个问题,让所有脚本都被重新放回一个文件中
在~/.ssh/ 下创建 config文件,并以如下格式编辑配置文件:
Host lab HostName amazon.com User piperck IdentityFile ~/.ssh/id_rsa
Host: 是我们在输入命令的时候的名字 比如我这里是lab 那么我使用ssh命令的时候需要使用
ssh lab
注意这里是空格,而不是 刚才我脚本输的ssh-redis 中间是横线,因为脚本可以随便自己使用名字,也算是一个好处吧。
HostName: 是目标主机的主机名,也就是平时我们使用ssh后面跟的地址名称。
Port:指定的端口号。
User:指定的登陆用户名。
IdentifyFile:指定的私钥地址。
然后就可以愉快的使用ssh lab 登陆了。同样的道理,可以在这个config文件里面建立无数个类似的配置,而再也不必每次都写脚本了。看起来还是蛮方便的。
另外在设置了config之后可能出现一个问题,每次在连接的时候可能会要求你输入私钥的对称加密密匙,所以需要把这个钥匙加入到authentication agent中。
所以这里要说到一个ssh-add命令
使用ssh-add ~/.ssh/your_private_key 输入你的私钥密码 就可以把你的私钥加入到ssh-agent中去,方便的让他帮你管理。而不再需要每次输入的时候都重复输入密码。
当然不需要的时候 你也可以使用
ssh-add -D 删除所有管理的密钥
ssh-add -d 删除指定的
ssh-add -l 查看现在增加进去的指纹信息
ssh-add -L 查看现在增加进去的私钥
如果重启之后,会发现需要重新load一下ssh-agent
ssh-add -K 将指纹加到钥匙串里面去
ssh-add -A 可以把钥匙串里面的私钥密码,load进ssh-agent
Reference:
http://nerderati.com/2011/03/17/simplify-your-life-with-an-ssh-config-file/ Simplify Your Life With an SSH Config File