ssh 远程连接方式总结
SSH 概述
SSH
(安全外壳协议 Secure Shell Protocol,简称SSH)是一种加密的网络传输协议,用于在网络中实现客户端和服务端的连接,典型的如我们在本地电脑通过 SSH
连接远程服务器,从而做开发,Windows、macOS、Linux都有自带的 SSH
客户端,但是在Windows上使用 SSH
客户端的体验并不是很好,所以我们一般使用 Xshell
来代替。
一,准备工作
1.1, 安装 SSH 客户端
为了建立 SSH 远程连接,需要两个组件:客户端和相应服务端组件,SSH 客户端是我们安装在本地电脑的软件;而服务端,也需有一个称为 SSH 守护程序的组件,它不断地侦听特定的 TCP/IP 端口以获取可能的客户端连接请求。 一旦客户端发起连接,SSH 守护进程将以软件和它支持的协议版本作为响应,两者将交换它们的标识数据。如果提供的凭据正确,SSH 会为适当的环境创建一个新会话。
MacOS 系统自带 SSH 客户端,可以直接使用,Windows 系统需要安装 Xshell
客户端软件,大部分 Linux 发行版系统都自带 SSH 客户端,可以直接使用,可通过 ssh -V
命令查看当前系统是否有 SSH 客户端。
[root@VM-0-2-centos ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
1.2, 安装 SSH 服务端
Linux 系统检查 ssh 服务端是否可用的命令有好几种,比如直接看是否有 ssh
进程在运行:
ps -ef | grep ssh
运行以上后,输出结果示例如下,有 sshd 进程在运行,说明 ssh 服务端可用。
-bash-4.3$ ps -e|grep ssh336 ? 00:00:00 sshd358 ? 00:00:00 sshd1202 ? 00:00:00 sshd1978 ? 00:00:00 sshd1980 ? 00:00:00 sshd2710 ? 00:00:00 sshd2744 ? 00:00:00 sshd2829 ? 00:00:00 sshd2831 ? 00:00:00 sshd9864 ? 00:00:00 sshd9893 ? 00:00:02 sshd
对于 Ubuntu 系统,可通过以下命令检查 OpenSSH
服务端软件是否可用:
ssh localhost # 不同 Linux 系统输出可能不一样
二,基于密码的登录连接
典型用法,只需输入以下命令即可连接远程服务器。
# ssh连接默认端口是22,如果本地机用户名和远程机用户名一致,可以省略用户名
ssh username@host
# 也可以指定连接端口
ssh -p port user@host
上述命令是典型的 SSH 连接远程服务器的命令,如果是第一次连接运行后会得到以下提示,正常输入 yes
,然后输入账号密码即可连接成功:
The authenticity of host '81.69.58.141 (81.69.58.141)' can't be established.
ED25519 key fingerprint is SHA256:QW5nscbIadeqedp7ByOSUF+Z45rxWGYJvAs3TTmTb0M.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yesLast login: Tue Feb 28 15:33:06 2023 from xx.xx.xx.xx
三,基于公钥登录连接
前面的命令是通过密码(私钥)登录,这样比较麻烦,因为每次登录我们都需要输入密码,因此我们可以选择 SSH 的公钥登录连接方式,省去输入密码的步骤。
公钥登录的原理,是先在本地机器上生成一对公钥和私钥,然后手动把公钥上传到远程服务器。这样每次登录时,远程主机会向用户发送一段随机字符串,而用户会用自己的私钥对这段随机字符串进行加密,然后把加密后的字符串发送给远程主机,远程主机会用用户的公钥对这段字符串进行解密,如果解密后的字符串和远程主机发送的随机字符串一致,那么就认为用户是合法的,允许登录。
只需要把私钥传给远程服务器,远程服务器就可以验证私钥是否是对应的公钥,如果是就允许登录,这样就不需要输入密码了。
SSH 支持多种用于身份验证密钥的公钥算法, 包括 RSA、DSA、ECDSA 和 ED25519 等,其中 RSA 算法是最常用的,因为它是 SSH 协议的默认算法,所以我们这里以 RSA
算法为例来生成密钥,并配置免密码远程连接。
ssh-keygen
是为 SSH 创建新的身份验证密钥对的工具。此类密钥对用于自动登录、单点登录和验证主机,常用参数定义如下:
-t
参数指定密钥类型-b
参数指定密钥长度
基于公钥登录连接的具体步骤如下:
1,本地终端运行 ssh-keygen -t rsa -b 4096
命令生成密钥对,运行后会提示输入密钥保存路径,直接回车即可,保存在默认路径下,然后会提示输入密钥密码,这里我们不设置密码,直接回车即可,然后会提示再次输入密码,这里也不设置密码,直接回车即可,最后会提示密钥生成成功,如下图所示,可以看出 ~/.ssh/
目录下,会新生成两个文件:id_rsa.pub
和 id_rsa
,分别是公钥和私钥文件。
2,将本地 .ssh
目录下的 id_rsa.pub
文件内容添加到目标服务器的 ~/.ssh/authorized_keys
文件中,如果目标服务器没有 .ssh
目录,需要先创建 .ssh
目录,然后再创建 authorized_keys
文件,然后再添加文件内容。
具体操作命令如下:
# 1,本地终端运行命令
cat ~/.ssh/id_rsa.pub # 查看本地公钥文件内容,并复制
# 2,远程终端运行命令,有 authorized_keys 文件则跳过
mkdir -p ~/.ssh # 创建 .ssh 目录
touch ~/.ssh/authorized_keys # 创建 authorized_keys 文件
# 3,然后将本地公钥文件内容粘贴到 `authorized_keys` 文件中,保存退出
如果觉得上述步骤太过繁琐,可通过下面命令,一键完成公钥登录连接的配置:
$ ssh username@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub
只要将公钥文件内容写入远程服务器的 authorized_keys
的文件,公钥登录的设置就完成了,后续远程连接就不用每次输入密码了!
Github
提交代码的时候,也是通过公钥登录连接的方式,只要将本地的公钥文件内容添加到 github 的 authorized_keys
文件中,就可以免密码提交代码了,原理是一模一样的。
四,VSCode 远程连接
VSCode 也支持远程连接,可以通过 Remote-SSH
插件来实现,具体操作步骤如下:
1,在 VSCode 中安装 Remote-SSH 插件。
2,windows 系统 ctrel + shift + p
命令打开命令面板,输入 Remote-SSH: Connect to Host...
,然后选择 SSH Configuration
,或者通过左侧菜单栏的 Remote Explorer
-> SSH Targets
-> SSH Configuration
进入。如下图所示:
3,然后会打开 ~/.ssh/config
配置文件,可以参考如下所示模板进行配置:
# Read more about SSH config files: https://linux.die.net/man/5/ssh_configHost JumpMachineHostName jump-vscode.sensetime.com# 你跳板机的用户名User usernameHost T4# 目标机的ip地址HostName xxx.xxx.xxx.xxx# 你目标机的用户名User username# 目标机登录端口Port 22# macos系统: ProxyCommand ssh -q -W %h:%p JumpMachineProxyCommand ssh -q -W %h:%p JumpMachine
4,本地机生产公钥并追加到远程服务器 authorized_keys
中的步骤,参考第三章。
5,配置完成后,保存退出,然后在 VSCode 中,点击左侧菜单栏的 Remote Explorer
-> SSH Targets
-> T4
,即可连接到远程服务器。
参考资料
- 维基百科-Secure Shell
- How to Use ssh-keygen to Generate a New SSH Key?
- SSH原理与运用(一):远程登录
相关文章:

ssh 远程连接方式总结
SSH 概述 SSH(安全外壳协议 Secure Shell Protocol,简称SSH)是一种加密的网络传输协议,用于在网络中实现客户端和服务端的连接,典型的如我们在本地电脑通过 SSH连接远程服务器,从而做开发,Wind…...
springboot+mybatisPlus简单实现数据分页显示
项目地址:https://gitee.com/flowers-bloom-is-the-sea/geo_demo/tree/v1.0/ 这个项目的测试是可以的。 先来查看一些tb_shop表: id name x y ------ ------ ------ --------里面是空数据,那么现在对数据里插入一些数据…...
axios的基本使用
axios 安装axios npm install axios 使用时先导入 import axios from ‘axios’ axios请求方式 axios支持多种请求方式 axios(config) axios.request(config) axios.get(url[, config]) axios.head(url, [, config]) axios.post(url[, data[, config]]) axios.put(url[, dat…...

核心 Android 调节音量的过程
核心 Android 系统提供的调节音量的方法 核心 Android 系统提供了多种调节音量的方法,这些方法主要包括如下这些。 如在 Android Automotive 调节音量的过程 中我们看到的,CarAudioService 最终在 CarAudioDeviceInfo 中 (packages/services/Car/servi…...

用C/C++制作一个简单的俄罗斯方块小游戏
用C/C制作一个简单的俄罗斯方块小游戏 用C/C制作一个简单的俄罗斯方块小游戏 0 准备1 游戏界面设计 1.1 界面布局1.2 用 EasyX 显示界面1.3 音乐播放 2 方块设计 2.1 方块显示2.2 随机生成一个方块2.3 方块记录 3 方块移动和旋转 3.1 方块的移动3.2 方块的旋转3.3 方块的碰撞和…...

使用免费负载生成器swingbench对oracle数据库进行压力测试(测试Oracle的功能或评估性能)
1.Swingbench 简介 Swingbench 是一个免费负载生成器(和基准测试),旨在对 Oracle 数据库 进行压力测试。目前最新版本 Swingbench 2.6。 SwingBench 由负载生成器,协调器和集群概述组成。该软件可以生成负载 并绘制交易/响应时间…...
【预告】ORACLE Primavera P6 v22.12 虚拟机发布
引言 离ORACLE Primavera P6 EPPM最新系统 v22.12已过去了3个多月,应盆友需要,也为方便大家体验,我近日将构建最新的P6的虚拟环境,届时将分享给大家,最终可通过VMWare vsphere (esxi) / workstation 或Oracle virtua…...

机器学习100天(四十):040 线性支持向量机-公式推导
《机器学习100天》完整目录:目录 机器学习 100 天,今天讲的是:线性支持向量机-公式推导! 首先来看这样一个问题,在二维平面上需要找到一条直线划分正类和负类。 我们找到了 A、B、C 三条直线。这三条直线都能正确分类所有训练样本。但是,哪条直线最好呢?直观上来看,我…...
失败经验之震荡玩家往往死于趋势市场
亏损,是从去年开始的吧。 尤其是去年,仅仅一年,就亏掉了自从交易以来的所有盈利。 现在,我甚至不敢去计算具体的亏损金额。 保守估计,已经亏损100万左右。 现在回想,似乎也是必然。 交易本来就是一个走…...

应用层与传输层~
文章目录应用层自定义应用层协议什么是自定义应用层协议自定义方式运输层运输层概述运输层特点运输层协议UDP协议UDP的特点UDP首部格式校验规则TCP协议TCP的特点TCP协议段格式TCP的性质确认序号超时重传连接管理三次握手四次挥手TCP的状态滑动窗口流量控制拥塞控制延迟应答捎带…...

IO文件操作
认识文件 狭义的文件 存储在硬盘上的数据,以“文件"为单位,进行组织 常见的就是普通的文件 (文本文件,图片, office系列,视频,音频可执行程序…)文件夹也叫做"目录" 也是一种特殊的文件。 广义的文件 操作系统,是要负责管理软硬件资源,操作系统(…...
【构建工具】webpack 3、4 升级指南,摆脱低版本的困扰
一、依赖处理 1.升级通用依赖 借用 ncu 库实现,帮你改写需要升级的package.json 然后再 npm install ncu -u <packages> # 可以指定依赖 ncu # 升级全部依赖大概列了下升级的效果 add-asset-html-webpack-plugin ^2.1.3 → ^5.0.2 clean-webpack-…...

Javaweb第一个项目——实现简单的登陆功能
第一步:打开idea-->文件-->新建 第二步: 在Demo文件夹 点击右键-->添加框架支持-->找到Web应用程序 勾选 第三步:配置Tomcat 第四步:新建一个lib(建在web-INF文件夹下)文件夹 用于存放jar包…...

OpenKruise 开发者不容错过的带薪实习机会!马上加入 LFX Mentorship 计划
LFX Mentorship 计划由 Linux Foundation 组织发起,为像 OpenKruise 这样的 CNCF 托管项目提供了激励开源贡献、扶植社区发展的优秀土壤。参与其中的开发者不仅有机会在经验丰富的社区 Mentor 指导下贡献开源项目、为职业生涯加分,完成工作后还能获得 $3…...

《c++ primer笔记》第八章 IO库
前言 简单看一下就行 文章目录一、IO类1.1基本概念1.2管理输出缓冲二、文件输入输出2.1文件模式三、string流3.1istringstream3.2ostringstream一、IO类 1.1基本概念 我们常见的流有istream和ostream,这两个流都是有关输入和输出的,此外,…...

web开发 用idea创建一个新项目
这个写着就是给自己当备忘录用的QAQ 这个老师上课一通操作啥也没看清…卑微搞了半天看样子是成功了 记录一下省的以后忘了怎么创建(? zufe lxy 2023.3 先行条件是已经自己装好了Tomcat和idea!!(我的idea是申请了教育…...

【FMCW 03】测速
从上一讲 测距 末尾的frame讲起。我们知道一个chirp对应了一个采样后的IF信号,我们将这些采样后的IF信号按chirp的次序排列成一个帧(frame),这就得到了我们实际中接收后处理的FMCW信号。 由于chirp的发射返回时间很短,…...

ERP(企业资源管理)概述
🌟所属专栏:ERP企业资源管理🐔作者简介:rchjr——五带信管菜只因一枚😮前言:该系列将持续更新ERP的相关学习笔记,欢迎和我一样的小白订阅,一起学习共同进步~👉文章简介&a…...

深入理解java虚拟机精华总结:性能监控和故障处理工具、类加载机制
深入理解java虚拟机精华总结:性能监控和故障处理工具、类加载机制性能监控和故障处理工具、类加载机制jpsjstatjinfojmapjhatjstackVisualVM类加载机制类加载的时机类加载的过程加载验证准备解析初始化类加载器类与类加载器双亲委派模型破坏双亲委派模型往期内容&am…...

推荐系统与推荐算法
文章目录第一章1.1推荐系统意义与价值1.2推荐系统历史与框架1.3推荐算法分类第二章2.1协同过滤的基本思想与分类2.2基于用户的协同过滤2.3基于项目的协同过滤2.4基于邻域的评分预测2.5基于二部图的协同过滤第三章3.1基于关联规则的推荐3.2基于矩阵分解的评分预测3.3概率矩阵分解…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...