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

其中 **** 换为具体域名。参考:

SSH端口转发

参考:实战 SSH 端口转发,留意里面的远程端口转发一节要把思路也反转一下,其实ssh client还是本地的、ssh server还是远程的。

关于docker容器里的使用

  1. 如果代理地址设置为127.0.0.1,实际上这个是容器的环路地址,而不是宿主机器的环路地址
  2. 如果代理地址设置为docker起的虚拟网卡的地址,那么反向环路地址实际上默认不会转发docker的虚拟网卡的地址(只会转发宿主机环路地址),这块可以用两种方式解决:
    1. 在远程服务器环境再起一个端口转发,具体见ssh端口转发
    2. 打开~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 executing ssh -g -L 8001:localhost:8000 oli@remote-machine on the server once you have executed ssh -R command on the client. This will make loopback port 8000 on the server accessible on all interfaces on port 8001.