当前位置: 首页 > news >正文

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.pubid_rsa,分别是公钥和私钥文件。

ssh-keygen

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 进入。如下图所示:

vscode-ssh

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,即可连接到远程服务器。

参考资料

  1. 维基百科-Secure Shell
  2. How to Use ssh-keygen to Generate a New SSH Key?
  3. SSH原理与运用(一):远程登录

相关文章:

ssh 远程连接方式总结

SSH 概述 SSH&#xff08;安全外壳协议 Secure Shell Protocol&#xff0c;简称SSH&#xff09;是一种加密的网络传输协议&#xff0c;用于在网络中实现客户端和服务端的连接&#xff0c;典型的如我们在本地电脑通过 SSH连接远程服务器&#xff0c;从而做开发&#xff0c;Wind…...

springboot+mybatisPlus简单实现数据分页显示

项目地址&#xff1a;https://gitee.com/flowers-bloom-is-the-sea/geo_demo/tree/v1.0/ 这个项目的测试是可以的。 先来查看一些tb_shop表&#xff1a; id name x y ------ ------ ------ --------里面是空数据&#xff0c;那么现在对数据里插入一些数据…...

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 系统提供了多种调节音量的方法&#xff0c;这些方法主要包括如下这些。 如在 Android Automotive 调节音量的过程 中我们看到的&#xff0c;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 是一个免费负载生成器&#xff08;和基准测试&#xff09;&#xff0c;旨在对 Oracle 数据库 进行压力测试。目前最新版本 Swingbench 2.6。 SwingBench 由负载生成器&#xff0c;协调器和集群概述组成。该软件可以生成负载 并绘制交易/响应时间…...

【预告】ORACLE Primavera P6 v22.12 虚拟机发布

引言 离ORACLE Primavera P6 EPPM最新系统 v22.12已过去了3个多月&#xff0c;应盆友需要&#xff0c;也为方便大家体验&#xff0c;我近日将构建最新的P6的虚拟环境&#xff0c;届时将分享给大家&#xff0c;最终可通过VMWare vsphere (esxi) / workstation 或Oracle virtua…...

机器学习100天(四十):040 线性支持向量机-公式推导

《机器学习100天》完整目录:目录 机器学习 100 天,今天讲的是:线性支持向量机-公式推导! 首先来看这样一个问题,在二维平面上需要找到一条直线划分正类和负类。 我们找到了 A、B、C 三条直线。这三条直线都能正确分类所有训练样本。但是,哪条直线最好呢?直观上来看,我…...

失败经验之震荡玩家往往死于趋势市场

亏损&#xff0c;是从去年开始的吧。 尤其是去年&#xff0c;仅仅一年&#xff0c;就亏掉了自从交易以来的所有盈利。 现在&#xff0c;我甚至不敢去计算具体的亏损金额。 保守估计&#xff0c;已经亏损100万左右。 现在回想&#xff0c;似乎也是必然。 交易本来就是一个走…...

应用层与传输层~

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

IO文件操作

认识文件 狭义的文件 存储在硬盘上的数据,以“文件"为单位,进行组织 常见的就是普通的文件 (文本文件,图片, office系列,视频,音频可执行程序…)文件夹也叫做"目录" 也是一种特殊的文件。 广义的文件 操作系统,是要负责管理软硬件资源&#xff0c;操作系统(…...

【构建工具】webpack 3、4 升级指南,摆脱低版本的困扰

一、依赖处理 1.升级通用依赖 借用 ncu 库实现&#xff0c;帮你改写需要升级的package.json 然后再 npm install ncu -u <packages> # 可以指定依赖 ncu # 升级全部依赖大概列了下升级的效果 add-asset-html-webpack-plugin ^2.1.3 → ^5.0.2 clean-webpack-…...

Javaweb第一个项目——实现简单的登陆功能

第一步&#xff1a;打开idea-->文件-->新建 第二步&#xff1a; 在Demo文件夹 点击右键-->添加框架支持-->找到Web应用程序 勾选 第三步&#xff1a;配置Tomcat 第四步&#xff1a;新建一个lib&#xff08;建在web-INF文件夹下&#xff09;文件夹 用于存放jar包…...

OpenKruise 开发者不容错过的带薪实习机会!马上加入 LFX Mentorship 计划

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

《c++ primer笔记》第八章 IO库

前言 简单看一下就行 文章目录一、IO类1.1基本概念1.2管理输出缓冲二、文件输入输出2.1文件模式三、string流3.1istringstream3.2ostringstream一、IO类 1.1基本概念 ​ 我们常见的流有istream和ostream&#xff0c;这两个流都是有关输入和输出的&#xff0c;此外&#xff0c…...

web开发 用idea创建一个新项目

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

【FMCW 03】测速

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

ERP(企业资源管理)概述

&#x1f31f;所属专栏&#xff1a;ERP企业资源管理&#x1f414;作者简介&#xff1a;rchjr——五带信管菜只因一枚&#x1f62e;前言&#xff1a;该系列将持续更新ERP的相关学习笔记&#xff0c;欢迎和我一样的小白订阅&#xff0c;一起学习共同进步~&#x1f449;文章简介&a…...

深入理解java虚拟机精华总结:性能监控和故障处理工具、类加载机制

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

推荐系统与推荐算法

文章目录第一章1.1推荐系统意义与价值1.2推荐系统历史与框架1.3推荐算法分类第二章2.1协同过滤的基本思想与分类2.2基于用户的协同过滤2.3基于项目的协同过滤2.4基于邻域的评分预测2.5基于二部图的协同过滤第三章3.1基于关联规则的推荐3.2基于矩阵分解的评分预测3.3概率矩阵分解…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...