SSH KeepAlive

网络不稳定的情况下,可能SSH的连接会中断。一般GUI的客户端,如SecureCRT、XShell、vSSH等,都可以有选项直接定时(例如每5秒)发送心跳包,来保持连接。命令后的OpenSSH客户端也有类似功能,需要开启参数 ServerAliveInterval
Mac 下需要用root编辑 /etc/ssh_config,linux下在 /etc/ssh/ssh_config.
也可以使用 ~/.ssh/config 配置用户级参数。

编辑后的内容形如:

ssh_config 里还有个参数 TCPKeepAlive,默认false,可以改为yes。
参考 http://unix.stackexchange.com/questions/34004/how-does-tcp-keepalive-work-in-ssh/34201#34201 的说明:
TCPKeepAlive是靠发送空的ACK包来保持连接,由可能在特定情况下无效(被防火墙过滤);
ServerAliveInterval 是SSH层的,数据加密状态传输,不会被简单规则过滤。
更多参数说明可以参考 man ssh_config.

上边的配置里我还开启了 ServerAliveCountMax 5,解释是:
10秒钟发送一次心跳,如果连续5次都没有响应,客户端就断开连接。
这个值默认是3。

SSH KeepAlive by @sskaje: https://sskaje.me/2015/10/ssh-keepalive/

Incoming search terms:

使用HAProxy搭建SSH代理

VPS SSH经常被封杀,只能国内找个某云,配个HAProxy,实现效果参考 windows 的netsh portproxy。

更多方案参考:https://www.digi77.com/the-art-of-port-forwarding-on-linux/

使用HAProxy搭建SSH代理 by @sskaje: https://sskaje.me/2015/10/%e4%bd%bf%e7%94%a8haproxy%e6%90%ad%e5%bb%bassh%e4%bb%a3%e7%90%86/

Incoming search terms:

SSH Chroot jails

为了不给各种仅使用ssh tunnel的人访问vps的信息,把SSH的chroot jail配好了。

准备工作

假定Chroot根目录为 /var/jail, 定义为

添加用户组

配置sshd_config

修改 /etc/ssh/sshd_config 添加下列配置

创建Jail

其实不创建也行,客户端ssh时开-N就好

添加用户

SSH Chroot jails by @sskaje: https://sskaje.me/2015/05/ssh-chroot-jails/

Incoming search terms:

英文OSX Terminal SSH无法输入中文

新电脑系统用了英文。
安装了两台debian 7的开发机,SSH上去之后发现Bash下中文输入不了,输入完成后Terminal会闪一下,输入不成功,但是vim里可以。
对比其他的VPS、服务器,CentOS,Ubuntu都一切正常。

为了排除字体,locale的可能,把中文字体装了,中文的locale也全加上了,依旧输入不了。

直到我想到这篇文章,然后退出SSH,本地看了眼这个session下的locale

执行

就好了

英文OSX Terminal SSH无法输入中文 by @sskaje: https://sskaje.me/2015/04/%e8%8b%b1%e6%96%87osx-terminal-ssh%e6%97%a0%e6%b3%95%e8%be%93%e5%85%a5%e4%b8%ad%e6%96%87/

ssh_exchange_identification: Connection closed by remote host

Google tells me that I am blocked because of something like /etc/hosts.deny or some other reason, I did everything but problem remains there.

Until I checked the audit.log and found there many attempts of ssh login.

So I add ListenAddress line in /etc/ssh/sshd_config, everything works well now.
This is because I have an local IP address like 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, but if I only have a public IP, I may choose to change ssh running at another port.

ssh_exchange_identification: Connection closed by remote host by @sskaje: https://sskaje.me/2014/05/ssh_exchange_identification-connection-closed-remote-host/

Incoming search terms: