话说每次你想连接服务器的时候都要这样:
1 | $ ssh maomihz.com |
假如你的服务器用的是非标准端口、和你不一样的用户名、非标准路径的私钥认证,你需要这样
1 | $ ssh [email protected] -p 23323 -i ~/.ssh/my_key.pub |
假如你还要端口转发的话,
1 | $ ssh -L 43110:localhost:43110 -L 28332:localhost:28332 -R \*:25565:localhost:25565 [email protected] -p 23323 -i ~/.ssh/my_key.pub |
要记住这条命令真不容易,但是,openssh可以通过创建配置文件的方式,记录所有关于一个主机的信息,以后再次登陆主机的时候只要这样:
1 | $ ssh maomihz |
今天的猫咪教程介绍如何使用ssh的配置文件来简化多服务器、多私钥的管理
3.1 找到配置文件
openssh
同时有SSH的服务端和客户端。对于ssh客户端的配置文件,用户配置文件在~/.ssh/config
,全局配置文件在/etc/ssh/ssh_config
修改全局配置文件需要root:
1 | $ vim ~/.ssh/config |
3.2 编辑配置文件
配置文件是按主机来归类的,要给每一个主机一个名字:
1 | Host 名字 |
你的主机名字就是用来执行ssh
命令用的:
1 | $ ssh 主机名字 |
它会读取配置文件里关于主机的信息来连接主机
3.3 常见的配置项
若要参考官方文档,请查看
ssh_config(5)
$ man 5 ssh_config
一个最常见、完整的主机配置是这样的:
1 | Host server |
HostName
定义了主机的域名/IP地址Port
定义了远程主机ssh服务器监听的端口User
定义了以该用户的身份登录IdentityFile
指定了用哪个私钥文件对远程主机进行验证RemoteForward
是远程端口转发,例子中所有请求远程25565端口(不管哪个网络接口)都会通过SSH隧道转给本地请求127.0.0.1:25565LocalForward
是本地端口转发,例子中所有请求本地43110端口都会通过SSH隧道转给远程请求127.0.0.1:43110
1 | $ ssh server |
3.4 进阶技巧
Host
后面的主机名字可以使用通配符,比如说
1 | Host server* |
匹配所有server开头的主机:server
/server_1
/server_home
SSH在读取文件的时候是从上往下读的,当它发现匹配时,会读取这一段里所有的配置数值。读取完后它并不会停止,还会继续往下读,假如有发现了一个匹配,它会加载里面的配置数值,但是一切已有的值不会被覆盖,所以说越通用的配置选项应该放在越后面。比如:
1 | Host home_forward |
假如运行ssh home_forward
,ssh会读取第一块,第二块和最后一块配置文件,把它们合起来使用。
假如运行ssh maomihz
,ssh会读取第三块,最后一块配置。