对于没有公网IP或没有开放公网端口的服务器而言,总是会碰到各种麻烦。出于开发需要就必须要登录内网服务器,那么可以通过ssh端口转发实现内网穿透。以下就记录一下实现pycharm和vnc的内网穿透。

配置免密登录

  • 修改本地.ssh配置

    打开~/.ssh/config,加入以下内容

    1
    2
    3
    4
    
    Host *
        ControlPersist yes
        ControlMaster auto
        ControlPath ~/.ssh/%n:%p
    
  • 修改跳板机ssh配置

    登录跳板机,执行上述步骤相同的操作

  • 在跳板机登录内网机器

  • 在本地机器执行以下命令

    1
    2
    3
    4
    5
    6
    7
    
    ssh -N -f -L 6000:<内网服务器ip>:22 -p <跳板机端口> username@<跳板机ip> -o TCPKeepAlive=yes
    # -N 表示仅进行端口转发
    # -f 表示在后台运行ssh
    # -L 表示在本地映射端口
    # 6000 表示本地端口
    # 22 表示内网服务器ssh端口,默认为22,应替换为你的服务器的ssh端口
    # 注意,此处默认跳板机服务器ssh端口为22,如果不是应添加端口号
    

上述操作执行完成并且没有明显的错误提示之后,可在本地终端执行如下命令:

1
2
ssh -p 6000 username@localhost
# username 表示内网服务器上的用户名

如果没有出现错误则能够成功登录。

配置Pycharm远程服务器

执行完成上述步骤之后打开pycharm,在菜单栏找到Tools -> Deployment -> Configuration,如下图所示:

打开之后会出现一个页面,点击+号添加sftp,出现如下图界面,服务器名称随便填写:

点击OK,跳出服务器配置页面,如下图所示,将内网服务器信息填写完成

注意,图中的Host应为127.0.0.1Port应为6000,即配置ssh时填写的本地端口号,用户名和密码为内网服务器对应的用户名和密码。

填写完成之后即可连接远程服务器。

通过Tools -> Deployment -> Browse Remote Host 可以选择打开已经添加的远程服务器,然后打开需要编辑的脚本即可进行远程开发。

VNC设置

执行完成免密登录的操作之后,登录内网服务器。如果是第一次使用VNC服务,

  • 首先在终端先执行vncpasswd命令

    如下图,填写一次密码,然后验证密码,第三部选择n

  • 然后执行vncserver,终端会给出类似如下信息:

  • 上述操作完成后,在本地下载vncviewer工具,如果使用的是chrome浏览器,可以添加VNC Viewer插件

  • 下载VNC工具或添加插件之后,在本地执行以下命令

    1
    2
    3
    
    ssh -N -f -L 6001:<内网服务器IP>:5904 -p 22 username@<跳板机IP> -o TCPKeepAlive=yes
    # 6001 表示转发远程VNC端口到本地的端口
    # 5904 表示远程的VNC端口,此端口名称和执行 vncserver 之后给的数字有关,如果是2,那么就是5902,如果是3,则是5903。此端口可以通过查看执行 vncserver 后给的log文件,比如上面给的 ~/.vnc/mgt:4.log
    
  • 此处以chrome的VNC插件为例,打开VNC Viewer插件,出现如下界面,填入本地IP地址和端口点击Connect

  • 执行完成上述操作后,会跳转到以下认证界面,填入执行vncpasswd时的密码即可

  • 最后大功告成,VNC登录内网服务器成功!

参考链接

  1. https://blog.csdn.net/a237072751/article/details/89336863