SSH使用篇:Windows登录Ubuntu虚拟机&设置免密登录

2023-05-16

目录

一、ssh的安装与启动

1、安装

2、启动服务器的SSH服务

二、口令登录

 1、登录命令

2、验证过程

3、登录失败:1、服务器变更 + 2、服务器IP变化

三、免密登录(公钥登录)

大致的三步

0、准备工作(不一定要弄)

1、客户端生成公私钥

2、将公钥复制到服务器中

3、第三步  

4、第四步

5、第五步

6、第六步


一、ssh的安装与启动

1、安装

        SSH分为客户端 openssh-client 和服务器 openssh-server,可以利用以下命令确认电脑上是否安装了客户端和服务器。

dpkg -l | grep ssh

        如果只是想远程登陆别的机器只需要安装客户端(Ubuntu默认安装了客户端),如果要开放本机的SSH服务就需要安装服务器。

sudo apt update        #更新数据
sudo apt upgrade        #更新软件
sudo apt install openssh-server  #下载安装ssh服务的服务器
sudo apt install openssh-client  #下载安装ssh服务的客户端
 
# 上面命令下载失败可以使用下面的命令尝试下载
sudo apt-get install openssh-client 
sudo apt-get install openssh-server 

这里给出的是ubuntu安装命令,其它系统请参考具体的安装命令


2、启动服务器的SSH服务

首先确认ssh-server是否已经启动了

ps -e | grep ssh

如图,sshd 表示ssh-server已经启动了。如果没有启动,可以使用如下命令启动:

sudo /etc/init.d/ssh start 

停止和重启ssh服务的命令如下:

sudo /etc/init.d/ssh stop  #server停止ssh服务 
sudo /etc/init.d/ssh restart  #server重启ssh服务

接下来就可以进行使用客户机远程登录服务器了~

二、口令登录

 1、登录命令

口令登录非常简单,只需要一条命令,命令格式为: ssh 客户端用户名@服务器ip地址  eg:

ssh lee@IP(服务器的username和IP)

如果需要调用图形界面程序可以使用 -X 选项

ssh -X lee@192.168.52.144

如果客户机的用户名和服务器的用户名相同,登录时可以省略用户名。

ssh 192.168.52.1

还要说明的是,SSH服务的默认端口是22,也就是说,如果你不设置端口的话登录请求会自动送到远程主机的22端口。我们可以使用 -p 选项来修改端口号,比如连接到服务器的1234端口:

ssh -p 1234 lee@192.168.52.1

客户机必须要知道服务器的ip地址。可以在服务器端电脑上利用 ifconfig 命令查看该机的ip地址:

2、验证过程

ssh 连接远程服务器后,首先有一个验证过程,验证远程服务器是否为陌生地址。如果是第一次登录远程主机,系统会给出下面提示:

上面这段文字告诉用户,这台服务器的指纹是陌生的,让用户选择是否要继续连接(输入 yes 或 no)。所谓“服务器指纹”,指的是 SSH 服务器公钥的哈希值。每台 SSH 服务器都有唯一一对密钥,用于跟客户端通信,其中公钥的哈希值就可以用来识别服务器。

下面的命令可以查看某个公钥的指纹。

ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub

上面的例子中,ssh-keygen -l -f命令会输出公钥/etc/ssh/ssh_host_ecdsa_key.pub的指纹。

        ssh 会将本机连接过的所有服务器公钥的指纹,都储存在本机的~/.ssh/known_hosts文件中。每次连接服务器时,通过该文件判断是否为陌生主机(陌生公钥)。

        上面输入yes即可。这时系统会提示远程主机被添加到已知主机列表,即本机的~/.ssh/known_hosts文件中。

然后会要求我们输入远程主机的密码,输入的密码正确就可以成功登录了。命令提示符会修改为远程主机的提示符,现在开始,终端中输入的命令都将在服务器中执行。

我们可以通过 Ctrl+D 或者 exit 命令退出远程登录。
 

3、登录失败:1、服务器变更 + 2、服务器IP变化

        服务器指纹可以防止有人恶意冒充远程主机。如果服务器的密钥发生变更(比如重装了 SSH 服务器),客户端再次连接时,就会发生公钥指纹不吻合的情况。这时,客户端就会中断连接,并显示一段警告信息。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
77:a5:69:81:9b:eb:40:76:7b:13:04:a9:6c:f4:9c:5d.
Please contact your system administrator.
Add correct host key in /home/me/.ssh/known_hosts to get rid of this message.
Offending key in /home/me/.ssh/known_hosts:36

        上面这段文字的意思是,该主机的公钥指纹跟~/.ssh/known_hosts文件储存的不一样,必须处理以后才能连接。这时,你需要确认是什么原因,使得公钥指纹发生变更,到底是恶意劫持,还是管理员变更了 SSH 服务器公钥。

        如果新的公钥确认可以信任,需要继续执行连接,你可以执行下面的命令,将原来的公钥指纹从~/.ssh/known_hosts文件删除。

ssh-keygen -R hostname

上面命令中,hostname是发生公钥变更的主机名。

除了使用上面的命令,你也可以手工修改known_hosts文件,将公钥指纹删除。

删除了原来的公钥指纹以后,重新执行 ssh 命令连接远程服务器,将新的指纹加入known_hosts文件,就可以顺利连接了。

三、免密登录(公钥登录)

        每次登录远程主机都需要输入密码是很不方便的,如果想要省去这一步骤,可以利用密钥对进行连接,还可以提高安全性。

大致的三步

1.本地机器生成公私钥
2.上传公钥到目标机器
3.测试免密登录

0、准备工作(不一定要弄)

首先我们需要准备两台或两台以上服务器或虚拟机,配置好静态ip,配置静态ip参见博文:虚拟机配置静态ip

使用root权限分别修改每台机器的hosts,添加每台机器所对应的IP和主机名
 

sudo vim /etc/hosts


在其中添加所有服务器或虚拟机节点ip和对应的域名,如下图所示:

然后输入:wq保存退出。

在每个节点分别设置其hostname,如下图所示:

hostname后为当前服务器或虚拟机的域名,是让此域名立即生效,不需要重启虚拟机。

1客户端生成公私钥

 [root@Hadoop-Master ~]#cd ~/.ssh 

如果没有该目录,先执行一次

ssh  localhost

不要手动创建,不然配置好还要输入密码。

使用ssh-keygen命令生成密钥对:

[hadoop@localhost ~]$ ssh-keygen -t  rsa
ssh-keygen
ssh-keygen -t rsa   #-t表示类型选项,这里采用rsa加密算法

        然后根据提示一步步的按enter键即可(其中有一个提示是要求设置私钥口令passphrase,不设置则为空,这里看心情吧,如果不放心私钥的安全可以设置一下),执行结束以后会在 /home/当前用户 目录下生成一个 .ssh 文件夹,其中包含私钥文件 id_rsa 和公钥文件 id_rsa.pub。

2、将公钥复制到服务器

使用ssh-copy-id命令将公钥复制到远程主机。ssh-copy-id会将公钥写到远程主机的 ~/ .ssh/authorized_key 文件中

ssh-copy-id -i .ssh/id_rsa.pub root@192.168.135.102	#复制密钥
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.135.103	#复制密钥


ssh-copy-id -i /root/.ssh/id_rsa.pub master  //依次输入yes,123456(root用户的密码)
ssh-copy-id -i /root/.ssh/id_rsa.pub slave1 //同上
ssh-copy-id -i /root/.ssh/id_rsa.pub slave2 //同上
ssh-copy-id -i /root/.ssh/id_rsa.pub slave3 //同上
[root@localhost .ssh]# cat  id_rsa.pub >>authorized_keys

说明 :cat  file1 >> file2  将file1 的内容追加到file2中,并不覆盖file2 中的内容,如果file2不存在则创建一个文件。

可以看到客户端写入到服务器的 id_rsa.pub (公钥)内容。

cd ~/.ssh
vim authorized_keys

3、复制完成即可实现免密登录,测试一下:

ssh 192.168.35.102									#直接登录

如果成功登录到192.168.35.102这台服务器,说明你的免密登录配置成功。

设置本机免密:

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

方案二

 3、第三步  

在要连接的Slave1 和 Slave2机器上也生成公钥和私钥。并将slave1 和 slave2 机器中生成的公钥id_rsa.pub文件copy到Master机器上。

[root@localhost .ssh]# scp id_rsa.pub root@172.16.254.107:~/.ssh/id_rsa.pub_s1
[root@localhost .ssh]# scp id_rsa.pub root@172.16.254.107:~/.ssh/id_rsa.pub_s2

4、第四步

切换到Master机器上的Slave1、Slave2 的id_rsa.pub_s1 和id_rsa.pub_s2追加合并到authorized_keys文件中。

 [root@Hadoop-Master .ssh]# cat id_rsa.pub_s1>> authorized_keys  
 [root@Hadoop-Master .ssh]# cat id_rsa.pub_s2>> authorized_keys  

5、第五步

将master机器上合并后的authorized_keyscopy文件复制到Slave1、Slave2机器上

 [root@Hadoop-Master.ssh]# scp authorized_keys root@172.16.254.108:~/.ssh/
 [root@Hadoop-Master.ssh]# scp authorized_keys root@172.16.254.109:~/.ssh/

6、第六步

将master 、Slave1 、Slave2 等各台机器的 .ssh/文件夹权限改为700,authorized_keys文件权限改为600(or 644)。

[root@localhost .ssh]# chmod 700 ~/.ssh
[root@localhost .ssh]# chmod 600 ~/.ssh/authorized_keys

(17条消息) SSH免密登录(超详细)_我是搬砖工人的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSH使用篇:Windows登录Ubuntu虚拟机&设置免密登录 的相关文章

  • Google Cloud SDK 无法安装“.exe;.bat;.com”不是可识别的命令

    我正在尝试在 Windows 10 笔记本电脑上安装 google cloud SDK 我尝试删除安装文件夹中的空格 并将路径添加到我的环境变量中 完整的错误是 Output folder C Users user Documents Do
  • 使用 shell 脚本将行附加到 /etc/hosts 文件

    我有一个新的 Ubuntu 12 04 VPS 我正在尝试编写一个安装脚本来完成整个 LAMP 安装 我遇到问题的地方是在 etc hosts文件 我当前的主机文件如下所示 127 0 0 1 localhost Venus The fol
  • dlib 不使用 CUDA

    我使用 pip 安装了 dlib 我的显卡支持 CUDA 但是在运行 dlib 时 它不使用 GPU 我在 ubuntu 18 04 上工作 Python 3 6 5 default Apr 1 2018 05 46 30 GCC 7 3
  • 如何在自托管 WCF 中获取多部分表单数据?

    我已经搜索了很长一段时间 但没有找到我要找的东西 我在 Windows 应用程序中自行托管了一个 http WCF 现在 在我的服务方法之一中 我需要接收一个文件和一些表单数据字段 在类似的问题中 情况要么发送一个文件 这是通过流数据然后转
  • Windows 10 上的 LibPNG 构建问题

    我试图在 Windows 10 上构建 libpng 以获取 win32 二进制文件 但我认为有一个与 awk 解析带有 CRLF 行结尾的文件相关的问题 我尝试使用 dos2unix 命令转换文件 但没有成功 结果相同 在 make 命令
  • ntdll!kifastsystemcallret

    我的程序在执行结束时崩溃 甚至看不到堆栈展开信息 我只能看到这个 ntdll kifastsystemcallret 有人能提供一些线索吗 KiFastSystemCallRet 意味着线程处于系统调用中 x86 NT 系统调用调度的一个不
  • 如何迭代所有注册表项?

    我正在尝试迭代所有注册表项以查找 包含 并删除 jre1 5 0 14 值 有办法做到吗 下面的代码只是在特定键下找到jre1 5 0 14 我确实想迭代所有的键 顺便说一句 if 子句获取是否等于 jre1 5 0 14 但如果它包含 j
  • 使用管理员权限打开cmd(Windows 10)

    我有自己的 python 脚本来管理我的计算机上的 IP 地址 它主要在命令行 Windows 10 中执行netsh命令 您必须具有管理员权限 这是我自己的计算机 我是管理员 运行脚本时我已经使用管理员类型的用户 Adrian 登录 我无
  • 将 value 转换为 bool 的魔法

    今天我意识到将值转换为 bool 是一种魔法 int value 0x100 unsigned char uc static cast
  • TRACKER:错误TRK0005:无法找到:“CL.exe”。该系统找不到指定的文件

    我尝试在 Windows 8 上的 Node js 项目中执行以下命令 npm 安装 电子邮件受保护 cdn cgi l email protection 但我收到一个错误 我不知道如何处理 TRACKER 错误TRK0005 无法找到 C
  • docker 构建失败,无法解析“archive.ubuntu.com”

    我无法使用以下 Dockerfile 构建映像 FROM ubuntu RUN apt get y update apt get y install nodejs npm ssh cache npm install when package
  • 从网络中的另一台计算机访问本地GAE SDK服务器

    我有开发服务器 来自 google appengine sdk 在我的 Ubuntu 计算机上运行 我可以通过导航到 localhost 8080 来访问我的网站 我想从网络中的另一台计算机 装有 Vista 操作系统 访问该站点 ifco
  • 为什么 Git Bash 无法运行我的可执行文件?

    I am on git for windows https github com git for windows 吉特 巴什 我无法在命令行上运行可执行文件 Pedr Abc 07 MINGW64 c dev ls sqlite3 exe
  • XAMPP为MariaDB设置root用户密码

    如何在 Ubuntu Kubuntu 16 04 上的 XAMPP 中设置 MariaDB 的 root 用户密码 默认情况下 root 用户没有设置密码 我正在使用 XAMPP 7 1 11 我在 Windows 和 Linux 上都成功
  • 为使用 SSH.NET SshClient.CreateShellStream 执行的命令 (sudo/su) 提供子命令

    我正在尝试使用 Renci SSH NET 从 C Web 应用程序连接到远程 Linux 服务器并执行 shell 脚本 我想一个接一个地运行脚本 但不知道如何运行脚本并读取输出并将其存储在标签中 我已经尝试了下面的代码 但无法一行接一行
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • 用于绘制音符的库[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以以某种方式在屏幕上绘制音符的 Windows 库 我将使用它用 C 编写一个应用程序
  • pyinstaller错误:OSError:[WinError 6]句柄无效

    该文件使用终端命令获取 wifi 密码netsh wlan show profiles我之前使用 pyinstaller 创建了一些 exe 它们工作得很好 代码 import subprocess import time import s
  • 使用 cron 作业推送到 GitHub - 权限被拒绝(公钥)

    我已经创建了一个 SSH 密钥 如下官方教程 https help github com articles generating ssh keys 00 将其添加到 GitHub 并创建一个 Bash 脚本 用于提交单个文件并将其推送到我在
  • Ubuntu 的打包 - Web 应用程序

    Web 应用程序没有与 C 或类似文件不同的 make 文件 但是 它需要放置在特定的目录中 例如 var www 我是 Linux 打包新手 所以我的问题是 如何将我的应用程序打包到 deb 中 以便在安装时将其放入 etc myprog

随机推荐

  • 虚幻引擎5.1版本新增功能

    虚幻引擎5 1版本新增功能 虚幻引擎5 1现已发布 xff01 2022年11月15日 其他应用 功能 广播与实况活动 建筑 影视 模拟 汽车与运输 游戏 虚幻引擎5 1 虚拟制片 我们很高兴地宣布 xff0c 虚幻引擎5 1现已推出 在这
  • vc与dev-c++混合编程 动态链接库c函数调用

    上回书说道 xff0c 如何在vc中使用dev c 43 43 中的类 xff0c 这次说一个更简单的问题 xff0c 如何实现vc调用dev c 43 43 的函数 1 打开dev c 43 43 新建工程 xff0c 选择dll xff
  • 【译】你可能不知道的iOS性能优化建议(来自前Apple工程师)

    作者丨凉介 来源丨掘金 链接 xff1a https juejin im post 5e4cfa4f6fb9a07cce74dba7 今天在推特上看到一篇关于性能优化不错的文章 xff0c 是前苹果开发人员写的 xff0c 翻译了一下与大家
  • c++20 concept

    Visual Studio 2019今天发布了16 3版本更新 xff0c 加入了C 43 43 20的concept支持 xff0c 在此记录一下concept的用法 xff1a concept示例 1 限制只能打印int类型 span
  • 解决STM32程序一烧录进去断电或复位即丢失问题

    分享一下个人错误经验 xff0c 之前焊接了一块STM32F103RCT6芯片 xff0c 配了ISP自动下载电路 xff0c 焊接好后上电烧写发现可以烧录进去 xff0c 但是怎么一断电或者一复位怎么程序就没了 xff0c 连一个简单的L
  • 阿里云ECS Windows服务器MySQL无法启动排查的解决方法

    问题现象 Windows主机 xff0c 部署MySQL程序后 xff0c 重启开机无法自动启动 xff0c 同版本在其他服务器运行正常 问题原因 排查Windows系统日志 xff0c 发现有如下报警记录 xff1a Microsoft
  • C规范编辑笔记(三)

    往期文章 xff1a C规范编辑笔记 一 C规范编辑笔记 二 正文 xff1a 继上篇我们的C规范编辑笔记 二 后 xff0c 我们今天开始分享第三篇笔记 xff0c 话不多说 xff0c 我们开始 1 一个 tab 键盘等于四个空格键 我
  • linux免费证书申请教程

    linux免费证书申请教程 直接去阿里云 菜单有个证书服务 进去有个购买证书菜单 选择免费的 然后会提示写个人资料 然后系统生成csr 然后提交审核 查看原文 xff1a http newmiracle cn p 61 963
  • wsl2迁移镜像虚拟磁盘

    wsl2备份 迁移 ubuntu 虚拟磁盘镜像 Author once day Date 2022年11月13日 1 引言 默认的wsl2会把Linux子系统虚拟磁盘文件放在C盘下 xff0c 如果在wsl2里面安装了太多的程序 xff0c
  • Gitlab-标准流程配置[总结多篇文章并实践多次,小白零基础亦可上手]

    谈谈这几天的感受吧 xff1a 公司因为以前的gitlab服务器出了一点问题 xff0c 让半路出家的我来看一下 xff0c 最后说模拟搭建一个gitlab服务器 xff0c 先看一下里面是跑些什么东东 xff0c 需要配置的内容是什么等
  • C语言之数组(数组赋值的三种形式)

    在C语言中 xff0c 对数组进行赋值的三种形式 1 通过循环的形式 即 xff1a 数组名 下标 对数组的元素进行依次赋值 include lt stdio h gt int main int i int a 10 61 0 for i
  • 4招教你创建一个程序代码

    Python 有两种主要的方式来完成你的要求 xff1a 语句和表达式 xff08 函数 算术表达式等 xff09 相信大部分读者已经了解二者的不同 xff0c 但是不管怎样 xff0c 我们还是再来复习一下 语句使用关键字来组成命令 xf
  • 苹果电脑备份和恢复方法。Time Machine

    苹果电脑在Leopard操作系统中自带了一个叫时间机器 Time Machine 的软件 xff0c 用于数据备份和恢复 既然70 80 的用户都不做备份 xff0c 为什么苹果要在Leopard中隆重推出时间机器这个新功能呢 xff1f
  • 进程通讯-Condition

    进程之间通讯 Condition await signal signalAll await 调用await方法的线程释放当前的lock xff0c 当前线程处于等待状态 类似于synchronized的wait 方法 signal 调用si
  • C语言中的位移运算

    位移运算 1 左移 span class hljs comment C左移表达式 span x lt lt k 对于一个n位的操作数x xff0c x lt lt k操作会生成一个值 xff1a x向左移动k位 xff0c 丢弃最高的k位
  • C语言读取文本文件中的矩阵,并将其保存在数组中

    一个简单的C语言读取文本文件操作 xff0c 原数据是3 5的一个矩阵 如下图 xff1a 读取后保存在一个二维数组中 include lt stdio h gt int main int a 3 5 FILE fpread fpread
  • LabVIEW2020 使用“格式化写入字符串”函数将数字转换为字符串

    目录 一 案例 xff1a 二 前面板 三 程序框图 四 验证 一 案例 xff1a 想把数值输入控件中的数字转换成字符串 例如 xff1a 数值输入控件输入30 xff0c 想转换成字符串 34 30 34 二 前面板 1 在前面板窗口上
  • Matlab使用fscanf函数读取文本数据

    这里假设文本文件中有5 4的一组数据 xff0c 使用Matlab进行读取并保存在一个矩阵中 原数据形式如下 xff0c 文件名为data123 xff0c 中间使用空格隔开 xff1a 1 2 3 4 5 6 7 8 9 10 11 12
  • 辗转相除法详解(C语言实现)

    辗转相除法 定义基本原理原理证明 算法实现思想C语言实现 定义 辗转相除法 xff0c 被称为欧几里得 xff08 Euclidean xff09 算法 xff0c 是求最大公约数的算法 基本原理 原理 两个正整数a和b a gt b xf
  • SSH使用篇:Windows登录Ubuntu虚拟机&设置免密登录

    目录 一 ssh的安装与启动 1 安装 2 启动服务器的SSH服务 二 口令登录 1 登录命令 2 验证过程 3 登录失败 xff1a 1 服务器变更 43 2 服务器IP变化 三 免密登录 xff08 公钥登录 xff09 大致的三步 0