0%

SSH高级用法

SSH高级用法

之前介绍过SSH入门使用,现总结一些高级用法,主要包括以下三部分:反向代理、正向代理、代理上网。

前期准备

以上三个使用功能分别使用SSH的-R -L -D功能

SSH代理功能常用的几个参数

1
2
3
4
5
6
-C 压缩所有数据
-q 静默模式
-T 不占用shell
-f 后台执行
-n 重定向stdin到/dev/null (-f用时推荐)
-N 不执行远程指令

如果登录出现异常,可使用-vvv显示调试信息。

服务端设置

编辑/etc/ssh/sshd_config

  • GatewayPorts yes可以在反向代理时服务端监听所有IP0.0.0.0而不是只有本机127.0.0.1
  • ClientAliveInterval 60每60秒给客户端发送心跳,ClientAliveCountMax 3超过三次不响应则关闭连接。
  • 确保GSSAPIAuthentication noGSS认证方式关闭和UseDNS noDNS反向查询关闭,此设置可提高SSH登录的响应速度,确保PasswordAuthentication yes密码认证打开(通常默认公钥认证也为打开)。

反向代理

ssh client能访问到的所有服务(包括局域网和本机),通过ssh连接映射到ssh server的端口上去。示例

  • ssh -CqTfnN -R 80:localhost:80 user@ssh_server 将本机的80端口映射到服务端80端口
  • ssh -CqTfnN -R 8080:192.168.1.190:80 user@ssh_server 将本局域网192.168.1.190的80端口映射到服务端8080端口

如果ssh server在公网,可内网的服务映射到公网上去。
如将本机的远程桌面端口3389反向代理到公网,将内网HPC的SSH端口22代理到公网。

正向代理

将ssh server能访问到的服务(包括局域网和本机),映射到ssh client的端口。
示例 ssh -CqTfnN -L 5901:vnc_server:5901 user@ssh_server 将局域网vnc_server的5901端口映射为本机的5901端口,由于vnc服务通常未加密,使用ssh也可加强通讯安全。需要注意此时去netstat中查看,会发现本机存在127.0.0.1:5901的监听,并不是0.0.0.0:5901,这意味着只能本机访问。如果其他机器也需访问本地转发要使用GatewayPorts关键字,增加-g参数即可。

代理上网

常见的SSH代理上网,使用方法:ssh -CqTfnN -D 1080 user@ssh_server,本机开放1080端口,可以在Internet选项中设置代理服务器地址为127.0.0.1:1080即可,或使用Chrome的SwitchyOmega插件配置根据网址决定是否使用代理。

总结

只要ssh server端或client端能访问的服务均可通过ssh端口代理被双方网络中的终端访问,而且所有连接均为加密。要注意的是,需长期保持连接来维持转发功能,一旦网络不稳定则掉线,所以必要时可配置守护进程,如果用于代理上网,这也是相比于shadowsocks的劣势。