如何使用 WinSCP 通过固定公共网络上的 TCP 地址远程连接到内网设备以传输文件?
1. 简介
Winscp是一个支持SSH(Secure SHell)的可视化SCP(Secure Copy)文件传输软件,它的主要功能是在本地与远程计算机间安全地复制文件,并且可以直接编辑文件。
可视化操作就是直接把文件从本机拖入,打开文件直接双击即可。
软件特性
- 支持协议众多:SSH ,FTP、SFTP、FTPS、SCP。
- 友好的图形操作界面,设置可以在选项界面中更改皮肤。
- 与 Windows 完美集成(拖拽, URL, 快捷方式)
- 内置文本编辑器
- 带有比较目录、同步、同步浏览、查找文件、清除缓存等额外有用功能。
- 能够保存多个ftp会话。
2. 软件下载安装:
GIthub项目地址:Github WinSCP
下载链接:download WinSCP
Winscp界面:
3. SSH链接服务器
首先,ifconfig命令查询服务器ip地址:
这里以centos7系统举例(ubuntu等同理):
复制局域网地址:192.168.40.162
直接从win本地拖入文件:
检查一下,成功传输:
以上操作在本地进行,如果人在异地,需要公网访问本地服务器,就需要在本地服务器上安装内网穿透服务来实现将本地局域网地址映射至公网。
4. WinSCP使用公网TCP地址链接本地服务器
首先,我们需要提前在本地服务器上安装内网穿透软件,这里我使用的是免费版本不限流量且支持TCP传输的Cpolar。
如何安装Cpolar请参考:
centos安装完毕后,浏览器登陆 localhost:9200 如下:(若centos无图形化界面可以手动调整隧道配置文件实现穿透,在文档第四章)
点击 创建隧道:
示例如下:
- 隧道名称:可自定义命名,注意不要与已有的隧道名称重复
- 协议:选择TCP
- 本地地址:22
- 域名类型:随机临时(cpolar免费版)
- 地区:选择China top
点击创建
打开在线隧道列表, 复制刚刚映射的公网tcp地址
回到winscp:
- 协议:SFTP
- 主机名:生成的公网地址(不带端口号)
- 端口号:写cpolar生成的5位数端口号
成功使用公网访问!
5. WinSCP使用固定公网TCP地址访问服务器
如果想将TCP链接固定为永久不变的ip地址,需要 使用 cpolar的付费功能 ,将套餐 升级 为 专业版套餐 及以上,支持固定TCP地址。
访问cpolar仪表盘:
往下翻,找到保留TCP地址:
- 地区:国内选择 china vip
- 描述:自行填写,用来区分地址用途 点击 保留
回到服务器cpolar webui:
- 隧道名称:可自定义命名,注意不要与已有的隧道名称重复
- 协议:选择TCP
- 本地地址:22
- 域名类型:随机临时(cpolar免费版)
- 地区:选择China top 映射为刚刚保留的固定tcp地址
所有配置都已经完成,现在我们就可以在异地公网访问centos服务器编辑和上传文件,并且链接地址固定永久不变!
我们现在测试一下,回到winscp:
成功使用固定tcp远程登陆centos服务器:
现在我们就可以使用任意一台电脑,无需在局域网内也可以访问此centos服务器!
上一篇: 科学什么是 SSH?
下一篇: Git 安全实践:保护您的代码库
推荐阅读
-
ssh工作流程及原理-SSH(Secure Shell Protocol,安全的壳程序协议),它可以通过数据包加密技术将等待传输的数据包加密后再传输到网络上。ssh协议本身提供两个服务器功能:一个是类似telnet的远程连接使用shell的服务器;另一个就是类似ftp服务的sftp-server,提供更安全的ftp服务。 连接加密技术简介 目前常见的网络数据包加密技术通常是通过“非对称密钥系统”来处理的。主要通过两把不一样的公钥与私钥来进行加密与解密的过程。 公钥(public key):提供给远程主机进行数据加密的行为,所有人都可获得你的公钥来将数据加密。 私钥(private key):远程主机使用你的公钥加密的数据,在本地端就能够使用私钥来进行解密。私钥只有自己拥有。 SSH工作过程:在整个通讯过程中,为实现SSH的安全连接,服务端与客户端要经历如下五个阶段: 版本号协商阶段 SSH目前包括SSH1和SSH2两个版本,双方通过版本协商确定使用的版本 密钥和算法协商阶段 SSH支持多种加密算法,双方根据本端和对端支持的算法,协商出最终使用的算法 认证阶段 SSH客户端向服务器端发起认证请求,服务器端对客户端进行认证 会话请求阶段 认证通过后,客户端向服务器端发送会话请求 交互会话阶段 会话请求通过后,服务器端和客户端进行信息的交互 一、版本协商阶段 服务器端打开端口22,等待客户端连接; 客户端向服务器端发起TCP初始连接请求,TCP连接建立后,服务器向客户端发送第一个报文,包括版本标志字符串,格式为“SSH-<主协议版本号>.<次协议版本号>.<软件版本号>”,协议版本号由主版本号和次版本号组成,软件版本号主要是为调试使用。 客户端收到报文后,解析该数据包,如果服务器的协议版本号比自己的低,且客户端能支持服务器端的低版本,就使用服务器端的低版本协议号,否则使用自己的协议版本号。 客户端回应服务器一个报文,包含了客户端决定使用的协议版本号。服务器比较客户端发来的版本号,决定是否能同客户端一起工作。如果协商成功,则进入密钥和算法协商阶段,否则服务器断开TCP连接。 说明:上述报文都是采用明文方式传输。 二、密钥和算法协商阶段 服务器端和客户端分别发送算法协商报文给对端,报文中包含自己支持的公钥算法列表、加密算法列表、MAC(Message Authentication Code,消息验证码)算法列表、压缩算法列表等等。 服务器端和客户端根据对端和本端支持的算法列表得出最终使用的算法。 服务器端和客户端利用DH交换(Diffie-Hellman Exchange)算法、主机密钥对等参数,生成会话密钥和会话ID。 由此,服务器端和客户端就取得了相同的会话密钥和会话ID。对于后续传输的数据,两端都会使用会话密钥进行加密和解密,保证了数据传送的安全。在认证阶段,两端会使用会话用于认证过程。 会话密钥的生成: 客户端需要使用适当的客户端程序来请求连接服务器,服务器将服务器的公钥发送给客户端。(服务器的公钥产生过程:服务器每次启动sshd服务时,该服务会主动去找/etc/ssh/ssh_host*文件,若系统刚装完,由于没有这些公钥文件,因此sshd会主动去计算出这些需要的公钥文件,同时也会计算出服务器自己所需要的私钥文件。) 服务器生成会话ID,并将会话ID发给客户端。 若客户端第一次连接到此服务器,则会将服务器的公钥数据记录到客户端的用户主目录内的~/.ssh/known_hosts。若是已经记录过该服务器的公钥数据,则客户端会去比对此次接收到的与之前的记录是否有差异。客户端生成会话密钥,并用服务器的公钥加密后,发送给服务器。 ****服务器用自己的私钥将收到的数据解密,获得会话密钥。 服务器和客户端都知道了会话密钥,以后的传输都将被会话密钥加密。 三、认证阶段 SSH提供两种认证方法: 基于口令的认证(password认证):客户端向服务器发出password认证请求,将用户名和密码加密后发送给服务器,服务器将该信息解密后得到用户名和密码的明文,与设备上保存的用户名和密码进行比较,并返回认证成功或失败消息。 基于密钥的认证(publickey认证):客户端产生一对公共密钥,将公钥保存到将要登录的服务器上的那个账号的家目录的.ssh/authorized_keys文件中。认证阶段:客户端首先将公钥传给服务器端。服务器端收到公钥后会与本地该账号家目录下的authorized_keys中的公钥进行对比,如果不相同,则认证失败;否则服务端生成一段随机字符串,并先后用客户端公钥和会话密钥对其加密,发送给客户端。客户端收到后将解密后的随机字符串用会话密钥发送给服务器。如果发回的字符串与服务器端之前生成的一样,则认证通过,否则,认证失败。 注:服务器端对客户端进行认证,如果认证失败,则向客户端发送认证失败消息,其中包含可以再次认证的方法列表。客户端从认证方法列表中选取一种认证方法再次进行认证,该过程反复进行。直到认证成功或者认证次数达到上限,服务器关闭连接为止。实例
-
如何使用 WinSCP 通过固定公共网络上的 TCP 地址远程连接到内网设备以传输文件?