跳转至

SSH

本地端口转发

有三个机器:本地机器A,跳板机(可以访问服务的机器)B,服务器C。A可以访问B,B可以访问C,但是A不能直接访问C。

那么我们可以借助 ssh 的本地转发-L 功能。

ssh -L 8896:C:8895 user@B

将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_configClientAliveInterval=30,让SSH 服务器会每隔 30 秒向连接的客户端发送一个空的数据包或消息请求( ClientAliveCountMax 了尝试的最大次数),用以检测客户端是否仍然连接并响应。如果客户端没有响应,服务器可以选择关闭连接,避免悬挂的会话占用资源。

Proxy

我想在家中,借助VPN,访问公司的电脑。如何给SSH 配置 Proxy?

如果是Mac,可以借助corkscrew。在~/.ssh/config对应的行中添加ProxyCommand,假设Proxy在http://127.0.0.1:7890

Host company-machine
    ProxyCommand corkscrew 127.0.0.1 7890 %h %p
    ...

参考链接:

ssh的三种端口转发
https://unix.stackexchange.com/questions/602518/ssh-connection-client-loop-send-disconnect-broken-pipe-or-connection-reset