当前位置: 首页 > 编程日记 > 正文

Linux07-OpenSSH

目录

一、使用SSH访问远程主机

1.1、什么是OpenSSH Secure Shell(SSH)

1.2、SSH主机密钥

二、配置基于SSH密钥的身份验证

2.1、基于SSH密钥的身份验证

2.2、自定义SSH服务配置

2.3、sftp传输文件


一、使用SSH访问远程主机

1.1、什么是OpenSSH Secure Shell(SSH)

OpenSSH指系统中使用的Secure Shell软件。OpenSSH Secure Shell(以下称ssh)用于在远程系统上安全的运行shell。

我们可以当前身份创建远程交互式shell, ssh  remotehost,然后在结束时用exit命令返回到当前shell。比如我们可以以student的身份从desktop远程登录server。也可以以其他身份登录远程主机, ssh remoteuser@remotehost。

我们先以student身份从desktop登录server,再以root身份从desktop登录server。

[student@desktop0 ~]$ ssh server0
The authenticity of host 'server0 (172.25.0.11)' can't be established.
ECDSA key fingerprint is 65:4d:ac:8a:c9:58:82:b5:0c:91:c4:ef:a5:e6:f6:65.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'server0,172.25.0.11' (ECDSA) to the list of known hosts.
student@server0's password:
Last login: Fri Jun 26 10:50:36 2020 from desktop0.example.com
[student@server0 ~]$ exit
logout
Connection to server0 closed.
[student@desktop0 ~]$
[student@desktop0 ~]$ ssh root@server0
root@server0's password:
Last login: Fri Jun 26 10:50:06 2020 from 172.25.0.250
[root@server0 ~]#
[root@server0 ~]# exit
logout
Connection to server0 closed.

1.2、SSH主机密钥

SSH通过公钥加密的方式保障通信安全。当某一ssh客户端连接到ssh服务器时,在该客户端登录之前,服务器会向客户端发送公钥副本。第一次远程登录server时,提示将server0 172.25.0.11加入known host里面。

当用户第一次使用ssh连接到特定服务器时,ssh命令可以在用户的 ~/.ssh/known_hosts 文件中存储该服务器的公钥。在此之后每当用户进行连接时,客户端都会通过对比 ~/.ssh/known_hosts 文件中的服务器条目和服务器发送的公钥,确保从服务器获得相同的公钥。如果公钥不匹配,客户端会假定网络通信遭到劫持或服务器已被入侵,并中断连接。

也就是说,如果服务器的公钥发生更改,用户需要更新起 ~/.ssh/known_hosts 文件并删除旧的条目才能登录。

服务器ID存储在本地客户端的 ~/.ssh/known_hosts 中。

[student@desktop0 ~]$ ll .ssh/known_hosts
-rw-r--r--. 1 student student 181 Jun 26 10:51 .ssh/known_hosts
[student@desktop0 ~]$ cat .ssh/known_hosts
server0,172.25.0.11 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBwmqCDZ/R1sMbPrZgHARIeL+RYPJ0CVt9AJRzJt4cHk4Ky4tmNjRx6FKJjhlcQJMDb+8CZjveJrgmOHxANvSgE=
[student@desktop0 ~]$

服务器主机密钥存储在服务器/etc/ssh/目录下的ssh_host_*key*文件中。非对称加密,私钥没有扩展名,公钥带.pub扩展名。

[root@server0 ~]# ll /etc/ssh/*key*
-rw-r-----. 1 root ssh_keys  227 Jan  7  2015 /etc/ssh/ssh_host_ecdsa_key
-rw-r--r--. 1 root root      162 Jan  7  2015 /etc/ssh/ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys 1675 Jan  7  2015 /etc/ssh/ssh_host_rsa_key
-rw-r--r--. 1 root root      382 Jan  7  2015 /etc/ssh/ssh_host_rsa_key.pub

二、配置基于SSH密钥的身份验证

2.1、基于SSH密钥的身份验证

之前远程连接时,都需要用户输入密码,这既不方便也不安全。ssh允许用户使用私钥-公钥方式进行身份验证。私钥文件用作身份验证的凭据,需要妥善保管。公钥并不苞米,将公钥复制到用户希望登录的系统,用于验证私钥。

使用命令ssh-keygen来生成密钥。这样就生成了私钥 ~/.ssh/id_rsa 和 公钥 ~/.ssh/id_rsa.pub。私钥和公钥的权限应该分别为600和644。

[student@desktop0 ~]$ ll .ssh/
total 8
-rw-------. 1 student student 1651 Jan  7  2015 authorized_keys
-rw-r--r--. 1 student student  181 Jun 26 10:51 known_hosts
[student@desktop0 ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/student/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/student/.ssh/id_rsa.
Your public key has been saved in /home/student/.ssh/id_rsa.pub.
The key fingerprint is:
4e:4e:73:3c:9d:3a:9f:7c:d6:f5:b5:13:8e:08:9a:9f student@desktop0.example.com
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|         . . .   |
|        S + o    |
|       = + o   .o|
|        = + . o.*|
|       o  .= oo+o|
|        .E  +o  .|
+-----------------+
[student@desktop0 ~]$ ll .ssh/
total 16
-rw-------. 1 student student 1651 Jan  7  2015 authorized_keys
-rw-------. 1 student student 1679 Jun 26 11:11 id_rsa
-rw-r--r--. 1 student student  410 Jun 26 11:11 id_rsa.pub
-rw-r--r--. 1 student student  181 Jun 26 10:51 known_hosts

通过ssh-copy-id命令将密钥复制到目标系统上,它默认复制的是~/.ssh/id_rsa.pub,也可以用-i选项指定复制哪个公钥ssh-copy-id -i FILE remoteuser@remotehost。

比如将student在desktop上生成的公钥复制到server上的root用户,会提示输入root@server的密码,复制成了以后student再远程登录root@server0就不再需要密码了。

那么公钥放在远程主机哪里呢?放在远程主机远程用户目录下的文件authorized_keys里面。我们是ssh-copy-id  root@server0,那么公钥就放~root/.ssh/authorized_keys文件里面。

[student@desktop0 ~]$ ssh-copy-id root@server0
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@server0's password:Number of key(s) added: 1Now try logging into the machine, with:   "ssh 'root@server0'"
and check to make sure that only the key(s) you wanted were added.[student@desktop0 ~]$ ssh root@server0
Last login: Fri Jun 26 11:03:52 2020 from desktop0.example.com
[root@server0 ~]#
[root@server0 ~]# tail -n 1 .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDqhQdZKRa7iHuCYAVRyLZ6MAHVQgeHhm8UCAn0JGA99PRR+llg7hnP3TRtD25z1PleDHZ1CWbTNYbROGxfeQ/vIfLQBQgfvJs47FMn8ggEPrEaFLX2g9GVk9RrxGdQPVcMCDRpPlbH1oyFPix3dihOyKbmOR6R89+EQWulstLFaxGTaT+BIhC1KgXCsECMAlONlcHiYbA+RH2MxS5UYHtQ/TN4wEdHa+4D2DOb+dfwzrfkG45MPv2GSp0onjMvaGGGD8w4SlMA0AjNxB+NQbCC3/hy1+4VcWIHDRJqZF6GOOc5cGfZICMi4YAOK/ibJB9FjHwiDV5m+NnJCzfMvSNr student@desktop0.example.com

远程注意和本地并不一定有相同用户名的用户,那么ssh远程连接的时候优先选择哪个用户呢?做个试验,在desktop上建立zhangsan用户,在server上配置user1、user2用户,并且zhangsan可以用密钥验证的方式以root、student、user1、user2身份远程登录server。假如我们不指定用户名会怎么样呢?是zhangsan@server,但是server上没有zhangsan啊!这个默认的用户就是由~zhangsan/.ssh/config 文件来控制的。文件里面可以设置多个主机。每个主机的设置由4行构成。

  • Host指对哪个主机生效。
  • StrictHostKeyChecking是对主机密钥是否强制检查。
  • PreferredAuthentications是默认使用哪个认证方式,publickey或者password。
  • User是默认登录的用户。
[zhangsan@desktop0 ~]$ cd .ssh
[zhangsan@desktop0 .ssh]$ vim config
[zhangsan@desktop0 .ssh]$ cat config
Host *.example.com *StrictHostKeyChecking noPreferredAuthentications publickeyUser user1
[zhangsan@desktop0 .ssh]$ ssh server0
Last login: Fri Jun 26 13:16:17 2020 from desktop0.example.com
[user1@server0 ~]$

2.2、自定义SSH服务配置

可以在/etc/ssh/sshd_config中修改OpenSSH服务。

限制root用户使用ssh登录。为了安全起见,禁止root用户通过ssh直接登录系统。将配置文件中的 PermitRootLogin yes 行去掉注释改为PermitRootLogin no,重启sshd服务使之生效,即可禁止root登录系统。另外,还可以改为PermitRootLogin without-password,只允许root进行密钥认证的登录,这个配置非常有用。

建议在 /etc/ssh/sshd_config 如下面配置时,配置密钥认证,用ssh-copy-id将密钥配置好。

PasswordAuthentication yes
PubkeyAuthentication yes
PermitRootLogin yes

密钥认证配置完成后,修改 /etc/ssh/sshd_config 配置文件为:禁止密码验证、允许密钥验证、只允许root密钥验证登录。重启sshd服务使之生效。

PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin without-password

另外,/etc/ssh/sshd_config 还有其它和sshd相关的配置。比如,修改ssh的端口、主机密钥、用户公钥存储也不一定在 ~/.ssh/authorized_keys文件等等。查看man 5 sshd_config知道更多。

Port 22# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile .ssh/authorized_keys

2.3、sftp传输文件

sftp登录,可以上传下载文件,非常方便。主要用到的命令是put和get。

[student@server0 ~]$ echo "test sftp" > f1
[student@server0 ~]$ ll
total 4
-rw-rw-r--. 1 student student 10 Jun 26 14:53 f1
[student@server0 ~]$ sftp root@server0
Connected to server0.
sftp> put ./f1
Uploading ./f1 to /root/f1
./f1                                            100%   10     0.0KB/s   00:00
sftp> get f2
Fetching /root/f2 to f2
/root/f2                                        100%    5     0.0KB/s   00:00
sftp> exit
[student@server0 ~]$ ll
total 8
-rw-rw-r--. 1 student student 10 Jun 26 14:53 f1
-rw-r--r--. 1 student student  5 Jun 26 14:54 f2
[student@server0 ~]$ cat f2
down
[student@server0 ~]$

相关文章:

ORB_SLAM2中的Sim3变换

对于双目、RGB-D相机,可获得深度,因此不存在尺度问题,因此Sim3中的尺度s1。 (1)通过词袋加速算法实现当前帧、闭环帧的特征点的匹配,建立闭环帧的路标点和当前帧的特征点间的联系。 (2&#xff…

Ubuntu16.04 下的网易云出现网络异常、无法播放,界面无响应问题的统一解决

能够在Linux系统下体验到原生界面的网易云音乐是件不错的事情,但是它总是经常性的出现网络异常,界面无响应的问题 为了听歌的体验,进行深入探究: 首先通过终端启用网易云音乐:sudo netease-cloud-music 会得到网易云音…

SpringBoot 概念和起步

一、概念和由来 1、什么是 Spring Boot Spring Boot 的设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用特定方式来进行配置,从而使开发人员不再需要定义样板化的配置。 Spring Boot 其实不是什么新的框架,它默认配置了很多框架的使用…

WKWebView Safari调试、JS互调、加载进度条、JS中alert、confirm、prompt

主要内容 Safari调试swift/OC与JS互调增加加载进度条支持JS中alert、confirm、prompt Safari调试 设置 —> safari --> 高级,开启JavaScript、网页检查器 打开Safari浏览器,选择调试的网页,同样在js里面可以断点调试: swift/OC与JS互调 这里…

CentOS7 打包RPM 升级OpenSSH8.3

目录 一、源码包 二、打包RPM 2.1、准备阶段 2.2、打包排错阶段 三、升级 漏扫设备发现OpenSSH有漏洞,需要升级到OpenSSH 8.1及以上版本,那么干脆就直接升级到发文时最新的版本,OpenSSH 8.3。做法是找到OpenSSH 8.3的源码包,…

步步为营-44-窗体之间传值--观察者模式

说明 :观察者模式又叫发布-订阅模式,其中又涉及到中介者模式 1 结构 2 创建Main窗体(中介者),ChildForm1(发布者),ChildForm2(订阅者),ChildForm3(订阅者), 2.1 ChildForm1中添加按钮,当按钮被点击是ChildForm2(订阅者),ChildForm3(订阅者),的文本框汇中获取信息 2.2 定义接口 …

java指令详解

Java是通过java虚拟机来装载和执行编译文件(class文件)的,java虚拟机通过命令java option 来启动,-option为虚拟机参数,通过这些参数可对虚拟机的运行状态进行调整. 一、如何查看参数列表: 虚拟机参数分为基本和扩展两…

wrs-arcface虹软人脸识别

前言 虹软人脸识别组件,支持活体识别、离线识别、图片人脸特征识别、图片是否同一人对比、相机人脸识别或对比,虹软免费版请使https://ext.dcloud.net.cn/plugin?id6084 功能 支持活体识别、离线识别图片人脸特征识别(年龄、性别、3DAngle)两张图片是否是同一人…

C++指针与引用的区别

(1)指针是一个变量,本身占有内存,内存中存储的是所指向对象的地址。引用是内存的别名。 (2)指针可以通过解引用的方式,取出所指向内存中的值。引用没有解引用。 (3)指针可…

Linux08-日志

目录 一、systemd的日志 1.1、sytemd-journald与systemd日志 1.2、systemd日志的持久化 二、系统常规日志 2.1、系统日志概述 2.2、查看系统日志文件 2.3、日志的轮转 2.4、分析系统日志 2.5、使用logger发送消息到日志 RHEL7的日志由2个服务负责记录,分别…

Java的小实验——各种测试以及说明

日期:2018.10.07 星期五 博客期:014 一、Java中的位运算 代码如下: 1 package Morts107;2 3 public class Test107 {4 public static void main(String[] args) {5 int z;6 z 13>>1;//00001101(13)---------------…

C++内存的分区

C内存分为四个区: (1)代码区:存放代码转译成的二进制代码。 (2)全局区:存放全局变量、静态变量(static)、常量(如字符串常量)。 全局区中还包含一…

SpringCloud的服务网关zuul

演示如何使用api网关屏蔽各服务来源 一、概念和定义 1、zuul最终还是使用Ribbon的,顺便测试一下Hystrix断路保护2、zuul也是一个EurekaClient,访问服务注册中心,获取元数据,使用本地的Ribbon负载均衡,Hystrix断路保护&…

wrs-tuya-cloud

前言 wrs-tuya-cloud是涂鸦官网针对云开发的插件,包含垂直品类硬件API(万能红外开放能力、设备连接服务、设备OTA固件升级、实时音视频、睡眠带开放能力、体脂秤开放能力、智能门锁开放能力、视频云存储 、邮件服务 、 语音消息服务、消息推送服务、短信服务 、内测…

Windows Server 2016 笔记

从业界普遍实践结果来看,Windows Server在服务器领域真是不太好用。但是,有些时候由于种种原因不得不用,所以还是有必要了解一下的。今天参加了一个Windows Server的培训,主要面对Windows Server 2016,写下这篇博客备忘…

(办公)网页发送到桌面快捷方式怎么做

转载自百度:https://jingyan.baidu.com/article/f79b7cb303d50a9145023e6e.html 有时候一个网页我们需要经常用到,每次找那个需要的网页很耗时间,那么我们怎么把我们需要的网页发送到桌面快捷方式呢? 这样下次我们直接点击桌面上的快捷方式就…

C++程序编译过程

程序编译的过程,是将源代码转换为计算机可执行的机械语言的过程。分为预处理、编译、汇编、链接四步。 (1)预处理:对程序进行预处理,比如将头文件的代码直接赋值到当前代码中等等. (2)编译&am…

Java的注释(详细版)

注释是对代码进行必要的说明,以便于后期的修改、维护和升级。Java的注释分为三种:第一种是**单行注释**:用双斜杠“//”来进行实例://单行注释第二种是**文档注释**:用斜杠“/”和星号“*”来进行实例:/***…

Hadoop的存储架构介绍

http://lxw1234.com/archives/2016/04/638.htm 该文章介绍了Hadoop的架构原理,简单易懂。 目前公司提供Hadoop的运算集群BMR,可以直接申请集群资源。转载于:https://www.cnblogs.com/blog-of-Fourier/p/6809811.html

编译OpenSSH8.4的RPM包及升级

目录 一、安装相关依赖包 二、创建rpmbuild目录并下载源码 三、打包及排错 四、升级到OpenSSH 8.4p1 以下是打包好的OpenSSH 8.4p1,包括7个rpm包,欢迎下载使用。 OpenSSH-8.4p1-Bundle 一、安装相关依赖包 根据以往经验,需要安装wget、…

centos 系统使用verdaccio搭建npm私库

.安装nodejs yum install -y nodejs 2.安装verdaccio npm install -g verdaccio --unsafe-perm 3.配置 a.修改配置文件 config.yaml,在其最后添加监听端口(使其可在外网访问) listen: 0.0.0.0:4873 b.对外开放4873端口 firewall-cmd --state …

视觉SLAM中PNP求解

PNP(Perspective-n-points)是SLAM中估计位姿的重要方法。已知条件为路标点在相机1中的相机坐标以及投影到相机2中的像素坐标,据此去估计相机1、相机2间的位姿。主要解法包括DLT、P3P、EPNP P3P 已知A、B、C在相机1坐标系下的坐标&#xff0…

Java程序的运行原理 用记事本编写Java代码

首先将Java代码写入源文件(.java)中→ 通过 javac 生成class文件(.class) → 再通过java命令执行程序:◆将class文件加载内存(相当于将东西输入大脑)◆检验class文件(大脑检查是否有语法等错误,若无误)◆将…

Linux下修改mysql的root密码后数据库消失怎么处理

Linux系统下如果没有通过password()函数修改mysql的root密码就会导致mysql数据库消失。有些人可能不知道而直接修改了mysql的root密码,于是产生了mysql数据库消失的问题,这个时候该怎么处理呢? 可以用下面的办法解决&a…

编译httpd-2.4.46的RPM包

目录 一、下载源码 二、编译&排错 2.1、第一次编译,解决依赖包问题。 2.2、第二次编译,解决anaconda导致的环境变量问题 2.3、第三次编译,解决apr版本过低问题 提供 apr-1.7.0、httpd-2.4.46 的RPM包下载。 apr-1.7.0-bundle.zip …

C/s模式B/S模式

C/s模式:是客户端/服务器(Client/Server)模式,主要指的是传统的桌面级的应用程序。比如我们经常用的信息管理系统。 C/S 客户端/服务器 例如QQ,网络游戏,需要下载客户端才能访问服务器的程序 B/S 浏览器/服务器 例如Intel&#xf…

分割catalina.out 每天生成一个文件

1. touch xxx(文件名字).sh 2. vim xxx.sh 写入 ----------------------- #!/bin/shcd dirname $0pwdddate %Y%m%dd7date -d7 day ago %Y%m%dcd ../logs/cp catalina.out catalina.out.${d}cat /dev/null > catalina.outrm -rf catalina.out.${d7} ----------…

、|| 和 、| 的区别(详尽版)

&&和|| 是逻辑运算符(也包括 !) 逻辑运算符含义&&逻辑与(两者为真才为真,一者为假即为假)︱︱逻辑或(两者为假才为假,一者为真即为真)!逻辑非(本来值的…

C++负数、小数如何保存

负整数 正整数直接按照源码存储,负整数按照补码存储。 原码、反码、补码 首先要清楚原码、反码、补码: 计算机中一个字节为8位,在此以一个字节为例: 原码: 十进制1:0000 0001 十进制-1:1000 …

MySQL00-这都不知道还TM学啥MySQL

目录 一、MySQL架构概述 1.1、客户端连接器 1.2、连接层 1.3、可插拔存储引擎 1.4、文件系统与文件 二、配置文件 三、数据文件 四、日志文件(以MySQL5.7.32为例) 4.1、错误日志 Error Log 4.2、一般查询日志 General Query Log 4.3、二进制日…