IT评测·应用市场-qidao123.com

标题: VS Code Remote-ssh 远程控制Windows主机 + 免密登录 + 内网穿透 [打印本页]

作者: 泉缘泉    时间: 2024-9-19 11:46
标题: VS Code Remote-ssh 远程控制Windows主机 + 免密登录 + 内网穿透

VS Code Remote-ssh 远程控制Windows主机 + 免密登录 + 内网穿透

写在前面

我们为什么需要远程连接服务器?(使用需求+场景)

为什么需要免密登录?

Why not?岂非你不想吗???
为什么需要内网穿透?

通常服务器是在一个局域网下的,没有公网ip,需要通过局域网内的NAT(Network Address Translation)讲局域网内的私有IP地址转换为公网IP才能正常通信。假如想要远程连接,要么和服务器处在同一个局域网下,但这通常限制了我们使用场景,假如脱离这个局域网,就没法远程开辟了。因此需要内网穿透,解决处于使用了NAT装备的私有TCP/IP网络中的主机之间创建连接的标题。但是假如你有公网IP,就没有这么多b事了。但是99%的可能你都没有公网IP,其中的原因也比力简单,公网IP地址是一种稀缺的有限的资源,而Internet是老美搞的,简单讲有人多了,就一定会有人少了,就得通各种各样的方式来提高我们为数不多的公网IP地址的使用率,以满足我国人民日益增长的上网需求doge。
什么是内网穿透?

内网穿透是一种网络技术,它答应在私有局域网(内网)中的装备或服务可以通过公共网络(如互联网)进行访问。通常环境下,内网装备由于NAT 装备屏蔽或防火墙等网络装备所掩护,无法直接从公网访问。通过使用内网穿透技术,可以创建起公网和内网之间的通道,使得外部用户可以通过公网连接到内网中的装备,就像这些装备直接连接在公网上一样。内网穿透简单来说就是将内网外网通过隧道打通,让内网的数据让外网可以获取。以下是一些常见的使用场景:

什么是SSH?

安全外壳协议(Secure Shell Protocol,简称SSH)是一种运行在应用层的(默认端标语为22)加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个根本解决方案,敏捷在全世界获得推广,目前已经成为Linux体系的尺度配置。SSH最常见的用途是远程登录体系,人们通常使用SSH来传输下令行界面和远程执行下令。SSH使用频率最高的场合是类Unix体系,但是Windows操作体系也能有限度地使用SSH。2015年,微软公布将在将来的操作体系中提供原生SSH协议支持,Windows 10 1803版本已提供OpenSSH工具。
SSH以非对称加密实现身份验证。身份验证有多种途径:

SSH协议有两个重要版本,分别是SSH-1和SSH-2。无论是哪个版本,核实未知密钥泉源都是紧张的事情,由于SSH只验证提供用户是否拥有与公钥相匹配的私钥,只要继续公钥而且密钥匹配服务器就会授予许可。如许的话,一旦继续了恶意攻击者的公钥,那么体系也会把攻击者视为正当用户
SSH远程连接之后醒目什么?

SSH远程连接之后,就可以像操作当地的机器一样操作远程机器。当需要操控的机器不在当地时就可以使用ssh协议远程连接操控。
实操详解

用ssh连接时,当地称为client,远程主机称为host。
在Windows下将你的远程主机配置为SSH服务器

这部分内容遵循Microsorft的官方教程,但在此基础上做了精简,官方教程写的好的部分会直接贴出来。
第一步:安装实用于 Windows 的 OpenSSH

在Powershell(管理员)中确保添加了防火墙规则
  1. # 启动sshd服务
  2. Start-Service sshd
  3. # 将sshd服务设置为自动启动,若不设置需要在每次重启后重新开启sshd
  4. Set-Service -Name sshd -StartupType 'Automatic'
  5. # 确认防火墙规则,一般在安装时会配置好
  6. Get-NetFirewallRule -Name *ssh*
  7. # 若安装时未添加防火墙规则"OpenSSH-Server-In-TCP",则通过以下命令添加
  8. New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
复制代码
第二步:连接到 OpenSSH 服务器
在第一次连接之前,我们先来了解两个概念:username和servername/hostname。在windows的SSH服务器中也就是在你的远程主机中

其中输入暗码应该是你的远程主机的开机暗码,而且这一次连策应该确保是在同一网络下进行的,由于我们并没有进行内网穿透操作

假如你结果的看到了以下输出,恭喜你乐成的连接上了你的远程主机,而且已经乐成了一泰半了。接下来我们去VS Code中连接,操作都是雷同的。
  1. domain\username@SERVERNAME C:\Users\username>
复制代码

在VS Code中连接你的远程主机

这部分内容遵循VS Code的官方教程,但在此基础上做了精简,官方教程写的好的部分会直接贴出来。这一次的连接同样应该确保是在同一网络下进行的,由于我们并没有进行内网穿透操作。
第一步:在 VS Code 中,从下令面板(F1、Ctrl+Shift+P )中选择Remote-SSH: Connect to Host…并使用与第一次连接中雷同的操作。user@hostname

第二步:假如 VS Code 无法主动检测您要连接的服务器类型,体系会要求您手动选择类型。

选择平台后,它将存储在属性下的VS Code 设置remote.SSH.remotePlatform中,以便您可以随时更改它。
稍后,VS Code 将连接到 SSH 服务器并进行自行设置。VS Code 将使用进度关照让您了解最新环境,而且您可以在Remote - SSH输出通道中查看具体日志。
第三步:连接后,您将进入一个空窗口。您始终可以参考状态栏来查看您连接到哪个主机。

然后,您可以使用“文件”>“打开…”或“文件”>“打开工作区…”打开远程计算机上的任何文件夹或工作区,就像在当地一样!

免密登录


第一步:创建密钥对
在你想存放密钥对的目次下打开powershell/cmd,输入以下下令。你可以选择在天生密钥对时为其指定差别的文件名。请注意,-f 后的id_rsa_linux 和 id_rsa_windows 只是示例文件名,你可以根据需要选择其他文件名。
  1. # 在 Linux 和 Mac 上
  2. ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa_linux
  3. # 在 Windows 上
  4. ssh-keygen -t rsa -b 2048 -f C:\Users\YourUsername\.ssh\id_rsa_windows
  5. # 如果你只有单平台使用 ssh
  6. ssh-keygen
复制代码
注意:当你在多个平台上使用 SSH 连接到差别的远程服务器时,可能需要为每个平台天生和使用差别的密钥对。这是由于每个平台(例如,Windows、Linux、Mac)可能有差别的文件体系和密钥文件位置,同时在安全性的考虑下,差别平台上的密钥对最好是独立的
这应当会表现如下某些内容(其中,“username”将替换为你的用户名)
  1. Generating public/private rsa key pair.
  2. Enter file in which to save the key (C:\Users\username\.ssh\id_rsa):
复制代码
你可以按 Enter 来继续默认值,或指定要在其中天生密钥的路径。 此时,体系会提示你使用暗码来加密你的私钥文件。 暗码可以与密钥文件一起工作来提供双重身份验证。 在此示例中,我们将暗码留空。(以下只是个例子,你的密钥肯定和示例差别)
  1. Enter passphrase (empty for no passphrase):
  2. Enter same passphrase again:
  3. Your identification has been saved in C:\Users\username\.ssh\id_rsa.
  4. Your public key has been saved in C:\Users\username\.ssh\id_rsa.pub.
  5. The key fingerprint is:
  6. SHA256:OIzc1yE7joL2Bzy8!gS0j8eGK7bYaH1FmF3sDuMeSj8 username@server@LOCAL-HOSTNAME
  7. The key's randomart image is:
  8. +--[RSA 2048]--+
  9. |        .        |
  10. |         o       |
  11. |    . + + .      |
  12. |   o B * = .     |
  13. |   o= B S .      |
  14. |   .=B O o       |
  15. |  + =+% o        |
  16. | *oo.O.E         |
  17. |+.o+=o. .        |
  18. +----[SHA256]-----+
复制代码
体系会在你指定的路径(本例子为 C:\Users\username.ssh)下天生两个文件,分别是id_rsa.pub和id_rsa,前者为天生的公钥,后者为私钥 。
  1. Mode                LastWriteTime         Length Name
  2. ----                -------------         ------ ----
  3. -a----        9/28/2018  11:09 AM           1679 id_rsa
  4. -a----        9/28/2018  11:09 AM            414 id_rsa.pub
复制代码
请记住,私钥文件等效于暗码,应当采用与掩护暗码雷同的方式来掩护它。
第二步:上传公钥文件id_rsa.pub,并将其导入到服务器中目标用户的公钥数据库
若要使用上面创建的用户密钥,需要将公钥放置在远程主机也就是你的服务器中上的一个文本文件中,该文件名为 authorized_keys,位于 users\username\ .ssh下。遗憾的是 Windows 下目前还没有提供 ssh-copy-id 下令,需要手动把用户的公钥添加到远程主机体系中的用户的 authorized_keys 文件中。具体在运行 OpenSSH Server 的主机上的操作步骤如下:
手动复制公钥文件 (id_rsa_windows.pub) 的内容,然后登录到远程服务器,并将内容粘贴到 authorized_keys 文件。如下是我天生的id_rsa.pub粘贴到 authorized_keys 文件中的内容:

假如你本机是Linux:
ssh-copy-id 下令通常用于将你的公钥复制到远程服务器的 authorized_keys 文件中。-i 选项用于指定身份文件(即你的公钥文件)。在本机执行如下下令:
  1. ssh-copy-id -i id_rsa.pub name@ip
复制代码
确保公钥文件 (id_rsa.pub) 在当地机器上的精确位置,而且你有读取该密钥的权限。同时,确保远程服务器上的用户 有一个 .ssh 目次,而且 authorized_keys 文件有精确的权限(通常是目次权限为 700,authorized_keys 文件权限为 600)。
然后将你的公钥 (id_rsa.pub) 的内容复制并追加到远程服务器的 authorized_keys 文件中。
第三步:在vscode上通过公钥认证的方式登录到远程服务器
将添加公钥到远程服务器后,最后一步便是配置你的主机。在Command Palette (F1/ctrl+shift+P) 中,输入"ssh open configuration" 并打开客户端(当地)的config文件,内容应该雷同如下
  1. Host name
  2.   HostName hostname
  3.   User username
复制代码
在下面添加配置(IdentityFile 私钥文件路径),以指定使用哪个私钥文件。
  1. IdentityFile "C:\Users\username\.ssh\id_rsa"
复制代码
注意添加的文本前面是有缩进的(你应该知道“username”应该换成什么吧)下图红框为我添加的内容。

如许,当你使用 ssh 连接服务器时,SSH 客户端将主动选择相应的私钥文件,就可以实现免密登录了。下一次登录远程主机时,点击vscode左下角的绿色标志,选择connect to,选择你的远程主机,就可以轻松登录了。
内网穿透

在开始之前首先搞清楚一点,以下操作都是在远程主机中进行的
第一步:首先去樱花FRP注册账号并实名认证
第二步:下载并安装对应操作体系的frp客户端
官方专门写了个教程可以说非常具体了(注意一定要设置开机自启动):帮助文档 - Sakura Frp
第三步:创建隧道
创建一个 TCP 类型的隧道,当地 IP 写 127.0.0.1,当地端口写 22 即可,访问暗码看个人,填不填写都行,有暗码安全一些,同时也会更麻烦以下。
服务->隧道列表->创建隧道

第四步:打开SakuraFrp启动器,启动隧道

记住此时返回的IP地址信息(格式雷同如下)

第五步:==在当地主机(不是远程主机啦!)==连接到隧道(注意保障远程OpenSSH服务器运行)
  1. ssh -p 端口号 用户名@IP地址
复制代码
到此为止,你就可以突破局域网的限制远程连接你的服务器啦!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4