IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> openssh -> 正文阅读

[系统运维]openssh

openssh

1. openssh简介

在Linux系统中,OpenSSH是目前最流行的远程系统登录与文件传输应用,也是传统Telenet、FTP和R系列等网络应用的换代产品。
其中,ssh(Secure Shell)可以替代telnet、rlogin和rsh,scp(Secure Copy)与sftp(Secure FTP)能后替代ftp。

OpenSSH采用密钥的方式对数据进行加密,确保数据传输的安全。在正式开始传输数据之前,双方首先要交换密钥,当收到对方的数据时,
再利用密钥和相应的程序对数据进行解密。这种加密的数据传输有助于防止非法用户获取数据信息。

OpenSSH采用随机的方式生成公私密钥。密钥通常只需生成一次,必要时也可以重新制作。

当使用ssh命令登录到远程系统时,OpenSSH服务器的sshd守护进行将会发送一个公钥,OpenSSH客户端软件ssh将会提示用户确认是否接收发送的公钥。
同时,OpenSSH客户端也会向服务器回传一个密钥,使OpenSSH连接双方的每个系统都拥有对方的密钥,因而能够解密对方经由加密链路发送的加密数据。

OpenSSH服务器的公钥与私玥均存储在/etc/ssh目录中。在OpenSSH客户端,用户收到的所有公钥,
以及提供密钥的OpenSSH服务器的IP地址均存储在用户主目录下的~/.ssh/known_hosts文件中(.ssh是一个隐藏目录)。
如果密钥与IP地址不再匹配,OpenSSH将会认为某个环节出了问题。例如,重新安装操作系统或者升级OpenSSH都会导致系统再次生成新的密钥,
恶意的网络攻击也会造成密钥的变动。因此,当密钥发生变化时,总是应当先了解密钥发生变化的原因,以确保网络访问期间的数据安全。

2. SSH 认证方式

openssh有两种认证方式,分别是:

  • 基于口令认证
  • 基于密钥认证

3. openSSH 的工作模式

openSSH是基于C/S架构工作的。

服务器端    //sshd,配置文件在/etc/ssh/sshd_config
客户端     //ssh,配置文件在/etc/ssh/ssh_config
    ssh-keygen      //密钥生成器
    ssh-copy-id     //将公钥传输至远程服务器
    scp             //跨主机安全复制工具

4. penSSH程序简介

OpenSSH的分为客户端和服务端两部分

  • Clients端的配置文件:/etc/ssh/ssh_config

  • Server端的配置文件:/etc/ssh/sshd_config

  • Server端服务脚本:/etc/rc.d/init.d/sshd

  • OpenSSH在Linux系统中默认是安装并启动的

openssh 主要的关键包有四个

openssh.x86_64 5.3p1-104.el6 //服务端和客户端的公共组件
openssh-askpass.x86_64 5.3p1-104.el6 //
openssh-clients.x86_64 5.3p1-104.el6 //客户端安装包
openssh-server.x86_64 5.3p1-104.el6 //服务端安装包

openssl-clients 几个常用文件

[root@localhost ~]# rpm -ql openssh-clients
/etc/ssh/ssh_config //客户端配置文件
/usr/bin/scp //远程复制文件
/usr/bin/sftp //远程文件共享
/usr/bin/slogin
/usr/bin/ssh
/usr/bin/ssh-add
/usr/bin/ssh-agent
/usr/bin/ssh-copy-id
/usr/bin/ssh-keyscan

openssl-server 几个常用文件

/etc/rc.d/init.d/sshd
/etc/ssh/sshd_config
/etc/sysconfig/sshd

5. 服务器端配置文件/etc/ssh/sshd_config 主要参数详解

参数注释
#Port 22//默认端口号,为了其安全一般要更改为其他端口
#AddressFamily any//说明要监听任意地址
#ListenAddress 0.0.0.0//监听本机所有IPV4的ip
#ListenAddress :://监听本机所有的IPV6的地址
Protocol 2监听的协议版本
# HostKey for protocol version 1//说明key的协议版本
SyslogFacility AUTHPRIV//使用AUTHPRIV 记录日志
#LogLevel INFO//log日志级别
#Authentication://认证相关
#PermitRootLogin yes//是否支持管理员直接登陆
#StrictModes yes//是否使用严格模式 (严格检查用户的某些相关信息)
#RSAAuthentication yes//是否支持RSA密钥认证
#PubkeyAuthentication yes//是否支持公钥认证

客户端配置文件时登陆别人的ssh使用的

参数注释
#Host *//表示连接所有主机
#Port 22//默认连接端口
#Cipher 3des//加密时使用的加密机制
#StrictHostKeyChecking ask//严格的主机秘钥检查 即第一次连接时是否询问

6. ssh 示例

服务端192.168.200.145
客户端192.168.200.146
// 查看服务端ip
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:88:82:3d brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.145/24 brd 192.168.200.255 scope global dynamic noprefixroute ens160
       valid_lft 1299sec preferred_lft 1299sec
    inet6 fe80::895:55db:fec3:a307/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

// 连接客户端
[root@localhost ~]# ssh root@192.168.200.146
The authenticity of host '192.168.200.146 (192.168.200.146)' can't be established.
ECDSA key fingerprint is SHA256:lHjJVpgxAHQML7Nzdt8CT4/1AZePELgM5EEUPTONw9A.
Are you sure you want to continue connecting (yes/no/[fingerprint])? y
Please type 'yes', 'no' or the fingerprint: yes
Warning: Permanently added '192.168.200.146' (ECDSA) to the list of known hosts.
root@192.168.200.146's password: 
Last login: Sat Sep 25 22:06:28 2021 from 192.168.200.1

///w命令可以显示当前登录到计算机的用户列表。这对于显示哪些用户使用ssh从哪些远程位置进行了登录以及执行了何种操作等内容特别有用
[root@localhost ~]# w
 22:17:45 up 15 min,  3 users,  load average: 0.15, 0.14, 0.09
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.200.1    22:06    2:25   0.00s  0.00s -bash
root     pts/1    192.168.200.1    22:06   11:17   0.82s  0.81s top
root     pts/2    192.168.200.145  22:16    1.00s  0.00s  0.00s w


7. SSH 主机密钥

ssh通过公钥加密的方式保持通信安全。当某一ssh客户端连接到ssh服务器时,在该客户端登录之前,服务器会向其发送公钥副本。这可用于为通信渠道设置安全加密,并可验证客户端的服务器。

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

这意味着,如果服务器的公钥发生更改(由于硬盘出现故障导致公钥丢失,或者出于某些正当理由替换公钥),用户则需要更新其~/.ssh/known_hosts文件并删除旧的条目才能够进行登录。

//主机ID存储在本地客户端系统上的 ~/.ssh/known_hosts 中
[root@localhost ~]# cat ~/.ssh/known_hosts
192.168.200.146 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGjn882l1yxhu5x+2tcWwzF8EaWiKzp9dsn5ySH2DPWYxXItnA139UqQ+fpOnTMnYc/AYtHZ6GuZp46XWCuefTI=

/主机密钥存储在SSH服务器上的 /etc/ssh/ssh_host_key* 中
[root@localhost ~]# ls /etc/ssh/
moduli              ssh_host_ecdsa_key.pub
ssh_config          ssh_host_ed25519_key
ssh_config.d        ssh_host_ed25519_key.pub
sshd_config         ssh_host_rsa_key
ssh_host_ecdsa_key  ssh_host_rsa_key.pub

8. 配置基于 SSH 密钥的身份验证

用户可通过使用公钥身份验证进行ssh登录身份验证。ssh允许用户使用私钥-公钥方案进行身份验证。这意味着将生成私钥和公钥这两个密钥。私钥文件用作身份验证凭据,像密码一样,必须妥善保管。公钥复制到用户希望登录的系统,用于验证私钥。公钥并不需要保密。拥有公钥的ssh服务器可以发布仅持有您私钥的系统才可解答的问题。因此,可以根据所持有的密钥进行验证。如此一来,就不必在每次访问系统时键入密码,但安全性仍能得到保证。

使用ssh-keygen命令生成密码。将会生成私钥/.ssh/id_rsa和公钥/.ssh/id_rsa.pub。

注意:

生成密钥时,系统将提供指定密码的选项,在访问私钥时必须提供该密码。如果私钥被偷,除颁发者之外的其他任何人很难使用该私钥,因为已使用密码对其进行保护。这样,在攻击者破解并使用私钥前,会有足够的时间生成新的密钥对并删除所有涉及旧密钥的内容。

生成ssh密钥后,密钥将默认存储在家目录下的.ssh/目录中。私钥和公钥的权限就分别为600和644。.ssh目录权限必须是700。

在可以使用基于密钥的身份验证前,需要将公钥复制到目标系统上。可以使用ssh-copy-id完成这一操作注意:

生成密钥时,系统将提供指定密码的选项,在访问私钥时必须提供该密码。如果私钥被偷,除颁发者之外的其他任何人很难使用该私钥,因为已使用密码对其进行保护。这样,在攻击者破解并使用私钥前,会有足够的时间生成新的密钥对并删除所有涉及旧密钥的内容。

生成ssh密钥后,密钥将默认存储在家目录下的.ssh/目录中。私钥和公钥的权限就分别为600644.ssh目录权限必须是700

在可以使用基于密钥的身份验证前,需要将公钥复制到目标系统上。可以使用ssh-copy-id完成这一操作

[root@localhost ~]# ssh-copy-id remoteuser@remotehost

通过ssh-copy-id将密钥复制到另一系统时,它默认复制~/.ssh/id_rsa.pub文件

[root@localhost ~]# ssh-keygen -t rsa 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:hbCvqzUsrv+8ifUz1vsJap7twg/3qg/RBKgIg388IuU root@localhost.localdomain
The key's randomart image is:
+---[RSA 3072]----+
|.     ...        |
|+ .   .o o       |
| * o .. . o      |
|. E =  . +       |
| . o .  S .      |
|     . . .       |
|    . *.o.o      |
|   . * =BB.o .   |
|  .o=o*=*OB++    |
+----[SHA256]-----+
[root@localhost ~]# ssh-copy-id root@192.168.200.146
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/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@192.168.200.146's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.200.146'"
and check to make sure that only the key(s) you wanted were added.

9. scp远程复制工具的使用简介

语法:

  • scp [OPTIONS] SRC…DEST
    常用选项:

  • -r: 递归复制,复制目录及内部文件时使用;

  • -p: 保存源文件元数据信息中的属主、属组及权限;

  • -q: 静默模式

  • -P PORT: 指明远程服务器使用的端口;

两种模式:

  • PUSH: scp [OPTIONS] /PATH/FROM/SOMEFILE … user@server:/PATH/TO/DEST
    //复制本地文件至远程主机 (但远程目录一定要有写权限)

  • PULL: SCP [OPTIONS] user@server:/PATH/FROM/SOMEFILE /PATH/TO/DEST

// 复制当前主机上的/root/222至192.168.200.146主机的/opt/目录下
[root@localhost ~]# scp -p /root/222 root@192.168.200.146:/opt/
222                      100%    0     0.0KB/s   00:00 

// 复制远程主机/etc/fstab至当前主机当前目录下
[root@localhost ~]# scp root@192.168.200.146:/etc/fstab ./
fstab                    100%  579   589.9KB/s   00:00    
[root@localhost ~]# ls
111  222  anaconda-ks.cfg  fstab

10. 自定义 SSH 服务配置

虽然OpenSSH服务器通常无需修改,但会提供其他安全措施,可以在配置文件/etc/ssh/sshd_config中修改OpenSSH服务器的各个方面。

PermitRootLogin {yes|no}    //是否允许root用户远程登录系统
PermitRootLogin without-password    //仅允许root用户基于密钥方式远程登录
PasswordAuthentication {yes|no}     //是否启用密码身份验证,默认开启

11. SSH 安全注意事项

[root@localhost ~]#  tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 |xargs
SKvaBq4ijHT3W53WP1jyMdMqwE7ffJ // //生成30位的密码
  • 使用非默认端口
  • 限制登录客户端地址
  • 仅监听特定的IP地址
  • 禁止管理员直接登录
  • 仅允许有限制用户登录
    • AllowUsers
    • AllowGroups
  • 使用基于密钥的认证
  • 禁止使用空密码
  • 禁止使用SSHv1版本
  • 设定空闲会话超时时长
  • 利用防火墙设置ssh访问策略
  • 限制ssh的访问频度和并发在线数
  • 做好日志的备份,经常分析(集中于某台服务器)
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-26 10:36:28  更:2021-09-26 10:38:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 16:44:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码