ssh config

对于一个开发者,每天都需要执行的一条命令就是ssh,如果能高效使用该命令,不仅能提升工程效率,更重要的是能有一个好的心情,不用每条干着重复无聊的输入密码,host等机械劳动。本篇文章介绍如何通过配置ssh提升我们的效率。

ssh config

ssh配置文件默认放在/etc/ssh/sshd_config和用户目录~/.ssh/config中,它的配置主要包括两个方面,主机配置和选项配置。主机配置顾名思义用于配置我们要登录的主机选项,选项则配置关于ssh连接信息。下文将详细介绍。

主机配置

有时我们需要连接多台服务器查看信息或者执行命令,可能由于配置的不同,每次访问服务器都可能像下面这样:

1
ssh username@host -p port

输入繁琐,且我们需要记忆用户名以及host。 一个记忆host的办法是把它放到/etc/hosts中,但我们仍然需要输入用户名,密码,或者有时候port。
ssh提供了更简便的办法,在config中,可以加入如下配置项:

1
Host    别名
    HostName        主机名
    Port            端口,默认22
    User            用户名
    IdentityFile    密钥文件的路径

IdentifyFile文件通过ssh-keygen生成,这里我们指定它的名称为test,这样会在.ssh目录下生成test.pub文件。
生成后我们将该文件内容复制到对端服务器.ssh/authorized_keys文件即可。
现在假设我们要访问的服务器主机名为test-host.com, 用户名为zheli。
这时我们的配置是这样:

1
Host    test
    HostName        test-host.com
    User            zheli
    IdentifyFile    ~/.ssh/test.pub

配置好后,我们仅需下面方式访问即可,是不是很简单?

1
ssh test

选项配置

多条连接共享

如果你需要在多个窗口中打开到同一个服务器的连接,而不想每次都输入用户名,密码,或是等待连接建立,那么你可以配置SSH的连接共享选项。

1
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p

通过以上配置后,当你与服务器建立一条连接后,将在.ssh生产ControlPath的文件,其实 %r 是用户名, %h 是远程主机IP, %p 是端口.
之后的连接都将共用这个连接文件,而不会再提示密码。你可以试试与服务器建立一条新连接后,再打开一个新窗创建同样的一条连接,你会发现,第二条连接几乎是在瞬间就建立好了。

长连接

如果你发现自己每条需要连接同一个服务器无数次,那么长连接选项就是为你准备的:

1
ControlPersist 4h

现在你每次通过SSH与服务器建立连接之后,这条连接将被保持4个小时,即使在你退出服务器之后,这条连接依然可以重用,因此,在你下一次(4小时之内)登录服务器时,你会发现连接以闪电般的速度建立完成,这个选项对于通过scp拷贝多个文件提速尤其明显,因为你不在需要为每个文件做单独的认证了。

##减少延迟
如果每次连接服务器都意味着你需要等待几十秒而无所事事,那么你或许应该试试在你的SSH配置中加入下面这条:

1
GSSAPIAuthentication no

服务器端启用了GSSAPI。登陆的时候客户端需要对服务器端的IP地址进行反解析,如果服务器的IP地址没有配置PTR记录,那么就容易在这里卡住了,通过设置禁用该功能。

##加速连接
如果你确保你和某个服务器之间的连接是安全的(比如通过公司内网连接),那么你就可以通过选择arcfourencryption算法来让数据传输更快一些:

1
Ciphers arcfour

注意这个加速是以牺牲数据的“加密”性为代价的,所以如果你连接的是位于网上的服务器,千万不要打开这个选项,并且确保你是通过VPN建立的连接。

心跳

有时服务端设置了超时选项,当长时间未与服务器交互时,会主动断开连接。为了避免这个问题,可以通过ServerAliveInterval选项,使得client端定时向Server端发送心跳

1
ServerAliveInterval 60