SSH在Linux中占有重要的地位。通常我们远程登录服务器都是通过ssh协议,但是ssh命令(或者SSH协议)能够实现的功能还有很多。我日常用到一些,但是肯定还有各种各样的用法,有兴趣的朋友可以自行搜索更多资料。
1. 防止掉线
使用SSH连接服务器时候,通常第一个要修改的选项就是防止掉线。总体上来说有两类方法来防止服务器掉线:
- 客户端/客户端工具发送心跳包;
- 服务器端发送心跳包。 如果有服务器的控制权,可以修改ssh的配置选项,推荐使用第二种方案,通常更有保障一些。如果没有服务器的控制权,那就只能用第一种了。
1.1 客户端工具SecureCRT
客户端工具配置因工具而异。我用的是SecureCRT,相应的配置可以在:Session Options - Terminal
中,对应的选项为:Send protocol NO-OP
,这里需要设置每个多少秒钟发送一个NO-OP
指令给服务器以维持连接不断开。配置如下图:
1.2 Mac命令行客户端
如果使用Mac命令行中的ssh命令,可以在配置文件.ssh/config
中增加如下配置:
1Host myhostshortcut
2 HostName myhost.com
3 User barthelemy
4 ServerAliveInterval 60
5 ServerAliveCountMax 10
1.3 服务器端配置
服务器端配置文件在:/etc/ssh/sshd_config
,增加如下配置即可:
1ClientAliveInterval 30
2ClientAliveCountMax 86400
其中的参数说明如下:
ServerAliveInterval: number of seconds that the client will wait before sending a null packet to the server (to keep the connection alive).
ClientAliveInterval: number of seconds that the server will wait before sending a null packet to the client (to keep the connection alive).
Setting a value of 0 (the default) will disable these features so your connection could drop if it is idle for too long.
总结一下:ServerAliveInterval用在客户端配置上,让客户端每个一段时间发送NO_OP包以保持连接想;ClientAliveInterval用在服务器端配置,让服务器端每隔一段时间发送包以保持连接。
除了ServerAliveInterval
,ClientAliveInterval
外还有:ClientAliveCountMax
,ServerAliveCountMax
,默认值为3。保持连线的最大时长=Interval*CountMax
。
2. 通过SSH映射远程服务器端口到本地
例如:我们在生产环境中有数据库服务器,但是不方便开放端口到外网。而本地的研发或者其他人员也想访问它。这时可以通过ssh协议将远程端口映射到本地网络中。
例如,环境信息如下:
- 数据库服务器IP为: 192.168.77.99:3306
- 跳板机地址为:taxfort.eveus.com
- 跳板机访问用户是ubuntu,访问方式是证书(
/opt/apps/taxmyxql/id_rsa
); - 映射到本地机器: 192.168.2.236:33306
我们可以使用如下的命令实现:
1#!/bin/bash
2ssh -o StrictHostKeyChecking=no -i /opt/apps/taxmysql/id_rsa -L 192.168.2.236:33306:192.168.77.99:3306 -N ubuntu@taxfort.eveus.com
相关参数介绍:
- -o StrictHostKeyChecking=no 跳过服务器证书强制校验。也就是不需要在authorized_keys中存在也可以链接服务器;
- -i 指定连接用的证书
- -L 指定端口映射的信息。格式是:
[bind_address:]port:host:hostport
- -N 不执行远端的命令。