linux笔记: ssh隧道技术

ssh映射远端端口到本地/ssh动态端口转发

Posted by Xiaolei.liang on April 7, 2020 本文总阅读量

ssh使用

1. 设置秘钥登录(免密码登录)

1.1 产生秘钥对

  1. 产生秘钥:运行命令ssh-keygen ,一路回车下来,会在~/.ssh 目录产生公钥和私钥,私钥放着,别泄露出去,公钥下一步使用。
  2. 秘钥包括私有部分(id_rsa)和公有部分(id_rsa.pub),将公有部分附加到远端服务器的指定文件中,文件为:~/.ssh/authorized_keys ,如果没有这个文件,创建,并将公钥写进去。

注意:

  1. ~ 目录不能是777,否则无法登录,因为目录权限太开放。
  2. id_rsa文件,即私钥文件,权限600,否则权限太开放,不予连接。

2. 设置通过跳板机登录

设置跳板机的命令比较简单,加上ProxyCommand 这个可选项就行,比如,我的跳板机ip是192.168.1.1,ssh端口是22,用户是admin,那么,对应的ProxyCommand可选项命令为:ProxyCommand ssh -q -x -W %h:%p -p22 admin@192.168.1.1 ,方便使用,可以通过重定义一个命令hello来通过跳板机登录:

alias hello=' ssh -o StrictHostKeyChecking=no -o "ProxyCommand ssh -q -x -W %h:%p -p22 admin@192.168.1.1"'

备注:

  1. StrictHostKeyChecking 跳过是否将主机添加到信任列表的认证
  2. 如果已经设置免密登录192.168.1.1,则不需要输入192.168.1.1的密码,否则,通过hello登录一个机器,需要先输入192.168.1.1的密码,再输入预登录的主机的密码。

3. 设置本地代理

ssh -D2247 admin@<remote_ip>

解释:

上述ssh命令的意义是将远端ip代理到本地的2247端口,然后使用chrome浏览器的SwitchyOmega 插件,对应填写就行。整体意思是把本地的请求使用2247端口走到服务器端,然后,当成remote_ip发出的请求,来对目的服务器来做访问。也称动态端口转发。

4. 设置远端端口映射到本地指定端口

  • 建立本机独享隧道 将本地6666端口通过10.0.0.56映射到10.0.0.57的23端口
SSH -L 6666:10.0.0.57:23 -Nf 10.0.0.56
# -L 将本地6666端与远程服务器2的23端口建立映射关系
# -N 不执行命令或者脚本否则会等待用户输入命令
# -f  不登录到主机一般-Nf搭配使用即后台运行且不登录
  • 共享隧道
SSH  -g  -L 5566:10.0.0.57:23 -Nf 10.0.0.56
# -g 共享5566端口即别人访问我的端口也可以直接使用隧道否则的话只能本机使用

5. 设置本地端口映射到远端指定端口

sshpass -p<远端主机root密码> ssh -M 2333 -NfR 8080:localhost:80 -o "ServerAliveInterval 60" -o "ServerAliveCountMax 9999999999" <用户名>@远端主机ip

注意:

  • 远端主机的/etc/ssh/sshd_config中需要配置: GatewayPorts yes, 否则,只会开启127.0.0.1的端口
  • -M 选项: 在远端主机开启指定端口进行回显
  • ServerAliveInterval 60: 第一个参数表示如果服务器(外网)没数据发来则过 60 秒客户端(内网)会发送一个空包到服务器,以保持 tcp 长连接,默认值为 0,表示不会发心跳包,所以这里设置为 60 秒。
  • ServerAliveCountMax 9999999999: 第二个参数表示,如果服务器(内网)没有收到心跳包指定次数,就中断连接

参考: ssh 隧道反向代理实现内网到公网端口转发