SSH使用
_:nil
TOC TOC
SSH的代理设置
ssh的代理设置,参考SSH in git behind proxy on windows 7 - Stack Overflow。
如:
Host github.com
ProxyCommand D:\\git\\mingw64\\bin\\connect.exe -S localhost:1080 %h %p
Hostname ssh.github.com
Port 443
其中 connect.exe
是由git带的mingw里有的,
具体参数含义 -S
表示为socks5代理, 如果是http代理更改为 -H
UBUNTU环境
ubuntu下可能没有connect程序,可以使用 nc
来设置代理,具体示例如下:
Host github.com
ProxyCommand=nc -X connect -x hkproxy.****.com:8080 %h %p
Hostname ssh.github.com
Port 443
其中 ****
换为具体域名。参考:
- Connect with SSH through a proxy - Stack Overflow
- sshd - How to use ssh over http or https? - Unix & Linux Stack Exchange
SSH端口转发
参考:实战 SSH 端口转发,留意里面的远程端口转发一节要把思路也反转一下,其实ssh client还是本地的、ssh server还是远程的。
- ⬜ 端口转发除开访问不可抵达的端口之外,加密相关功能也是可以完成的,这块再看一下。
关于docker容器里的使用
- 如果代理地址设置为127.0.0.1,实际上这个是容器的环路地址,而不是宿主机器的环路地址
- 如果代理地址设置为docker起的虚拟网卡的地址,那么反向环路地址实际上默认不会转发docker的虚拟网卡的地址(只会转发宿主机环路地址),这块可以用两种方式解决:
- 在远程服务器环境再起一个端口转发,具体见ssh端口转发
打开~sshd_config~中的~GatewayPorts~选项,具体见linux - sshd GatewayPorts always “no” - Super User 具体的配置改动为:
GatewayPorts yes
然后使用
sshd -T -C user=me,host=localhost,addr=IP | grep -E "gatewayports"
校验。 留意远程转发的~bind_address~选项,这个可以做更精细的控制
多网卡
在多网卡的时候,远程端口转发需要wildcard所有网卡的代理什么的,这时候可以使用~GatewayPorts~选项,或者在远端再维护一个本地的端口转发。具体可以参考:tunnel - Reverse port tunnelling - Ask Ubuntu。
其中的第二个回答就是临时使用本地端口转发来解决的:
If the server has
GatewayPorts no
, you can achieve the same result by executingssh -g -L 8001:localhost:8000 oli@remote-machine
on the server once you have executedssh -R
command on the client. This will make loopback port 8000 on the server accessible on all interfaces on port 8001.