SSH
本地端口转发
有三个机器:本地机器A,跳板机(可以访问服务的机器)B,服务器C。A可以访问B,B可以访问C,但是A不能直接访问C。
那么我们可以借助 ssh 的本地转发-L
功能。
将C的8895端口,映射到本地的8896端口,借助B。只要B能正常访问C的8895端口就可以。
Broken Pipe
如果长久不和远程机器互动,可能会遇到 Client_loop: send disconnect: Broken pipe
的报错,连接断开。
在客户端上,可以通过添加 -o ServerAliveInterval=30 -o TCPKeepAlive=no
参数,这意味着每 30 秒,SSH 客户端会发送一个空的数据包到服务器。这个功能主要用来保持 SSH 会话的活跃状态,防止由于长时间无活动而导致的会话超时或被网络设备(如防火墙)断开连接。
在服务端,也可以编辑/etc/ssh/sshd_config
的ClientAliveInterval=30
,让SSH 服务器会每隔 30 秒向连接的客户端发送一个空的数据包或消息请求( ClientAliveCountMax
了尝试的最大次数),用以检测客户端是否仍然连接并响应。如果客户端没有响应,服务器可以选择关闭连接,避免悬挂的会话占用资源。
Proxy
我想在家中,借助VPN,访问公司的电脑。如何给SSH 配置 Proxy?
如果是Mac,可以借助corkscrew
。在~/.ssh/config
对应的行中添加ProxyCommand
,假设Proxy在http://127.0.0.1:7890
。
参考链接:
ssh的三种端口转发
https://unix.stackexchange.com/questions/602518/ssh-connection-client-loop-send-disconnect-broken-pipe-or-connection-reset