SSH从原理到配置

远程连接服务器

什么是远程连接服务器

远程连接服务器通过文字或图形接口方式来远程登录系统,让你在远程终端前登录linux主机以取得可操作主机接口(shell),而登录后的操作感觉就像是坐在系统前面一样。
允许别人远程登录到你的设备上,你的设备就是远程连接服务器。

远程连接服务器的功能

1)分享主机运算能力
2)服务器类型有限度开放连接
3)工作站类型,只对内网开放(安全)

常见的远程管理工具

|--RDP(remotedesktop protocal )协议,windows远程桌面管理(图形界面)
|--telenetCLI界面下远程管理,几乎所有操作系统都有(内容明文传输)  23
|--ssh  CLI界面下的远程管理,几乎所有操作系统都有(内容加密传输) 类unix系统下主要  22  远程管理方式(linux BSD Macos)
|--RFB(remote frame buffer) 图形化远程管理协议 VNC (Virtual Network Computing)使用的协议。(在linux unix Macos 下的图形界面远程管理工具)

SSH

  1. SSH代表安全外壳(Secure Shell),它现在是通过互联网访问网络设备和服务器的唯一的主要协议。
  2. SSH默认情况下通过端口22运行;不过很容易更改这个端口。
  3. SSH是一种非常安全的协议,因为它共享并发送经过加密的信息,从而为通过互联网等不安全的网络访问的数据提供了机密性和安全性。
  4. 一旦通讯的数据使用SSH经过加密,就极难解压和读取该数据,所以我们的密码在公共网络上传输也变得很安全。
  5. SSH还使用公钥用于对访问服务器的用户验证身份,这是一种很好的做法,为我们提供了极高的安全性。
  6. SSH主要用在所有流行的操作系统上,比如Unix、Solaris、Red-Hat Linux、CentOS和Ubuntu等。
  7. ssh服务端由2部分组成:openssh(提供ssh服务) openssl(提供加密的程序)
  8. ssh的客户端可以用XSHELL,Securecrt, Mobaxterm等工具进行连接,ssh sftp

TELNET

  1. Telnet是电信(Telecommunications)和网络(Networks)的联合缩写,这是一种在UNIX平台上最为人所熟知的网络协议。
  2. Telnet使用端口23,它是专门为局域网设计的。
  3. Telnet不是一种安全通信协议,因为它并不使用任何安全机制,通过网络/互联网传输明文格式的数据,包括密码,所以谁都能嗅探数据包,获得这个重要信息。
  4. Telnet中没有使用任何验证策略及数据加密方法,因而带来了巨大的安全威胁,这就是为什么telnet不再用于通过公共网络访问网络设备和服务器。

SSH

加密是如何实现的

SSH算法

SSH为了确保信息的安全传输,从连接发起到完成各阶段的各个点SSH协议采用了许多不同类型的数据加密技术,包括可逆的对称加密,非对称加密以及不可逆的哈希散列。

Ssl/tls(TransportLayer Security 传输层安全协议)

SecureSocket Layer,为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。
一般通用之规格为40bit之安全标准,美国则已推出128bit之更高安全标准,但限制出境。只要3.0版本以上之I.E.或Netscape浏览器即可支持SSL。 Sslv3 -SSLv2
当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。

SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。

SSL协议可分为两层:

  1. SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
  2. SSL握手协议(SSLHandshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
    在这里插入图片描述

ssl提供服务 ssh [email protected]

1)认证用户和服务器,确保数据发送到正确的客户机和服务器;  握手协议
2)加密数据以防止数据中途被窃取;                                          ssl记录协议
3)维护数据的完整性,确保数据在传输过程中不被改变。

SSH和SSL的区别

ssl是通讯链路的附加层。可以包含很多协议。https, ftps, .....
ssh只是加密的shell,最初是用来替代telnet的。通过port forward,也可以让其他协议通过ssh的隧道而起到加密的效果。

SSH建立连接的完整过程

连接过程

  1. SSH协议版本协商阶段:
    客户端通过TCP三次握手与服务器的SSH端口建立TCP连接。
1.服务器通过建立好的连接向客户端发送一个包含SSH版本信息的报文,格式为“SSH-<SSH协议大版本号>.<SSH协议小版本号>-<软件版本号>”,软件版本号主要用于调试。
2.客户端收到版本号信息后,如果服务器使用的协议版本号低于自己的,但是客户端能够兼容这个低版本的SSH协议,则就使用这个版本进行通信。否则,客户端会使用自己的版本号。
3.客户端将自己决定使用的版本号发给服务器,服务器判断客户端使用的版本号自己是否支持,从而决定是否能够继续完成SSH连接。

如果协商成功,则进入密钥和算法协商阶段。

  1. 密钥和算法协商阶段:
1.服务器端和客户端分别发送算法协商报文给对端,报文中包含自己支持的公钥算法列表,加密算法列表,MAC(MessageAuthentication Code,消息验证码)算法列表,压缩算法列表等。
2.和版本协商阶段类似,服务器端和客户端根据自己和对端支持的算法来决定最终要使用的各个算法。
3.服务器端和客户端利用Diffie-Hellman密钥交换算法,主机密钥对等参数,生成共享密钥和会话ID。会话密钥用于在后续的通信过程中两端对传输的数据进行加密和解密,而会话ID用于认证过程。
  1. 认证阶段:
1.客户端向服务器端发送认证请求,请求中包含用户名,认证方法,密码或密钥。
2.服务器端对客户端进行认证,如果认证失败,则向客户端发送失败消息,其中包含可以再次认证的方法列表。
3.客户端再次使用支持的认证方法中的一种进行认证,直到达到认证次数上限被服务器终止连接,或者认证成功为止。
SSH支持的两种认证方式:
密码认证:客户端通过用户名/密码进行认证,将使用会话密钥加密后的用户名和密码发送给服务器,服务器解密后与系统保存的用户名和密码进行对比,并向客户端返回认证成功或失败的消息。
密钥认证:采用数字签名来进行认证,目前可以通过RSA和DSA两种算法实现数字签名,客户端通过用户名,公钥以及公钥算法等信息来与服务器完成验证。
  1. 会话请求阶段:
1.服务器等待客户端请求。
2.认证完成后,客户端想服务器发送会话请求。
3.服务器处理客户端请求,完成后,会向客户端回复SSH_SMSG_SUCCESS报文,双方进入交互会话阶段。如果请求未被成功处理,则服务器返回SSH_SMSG_FAILURE报文,表示请求处理失败或者不能识别客户端请求。
  1. 交互会话阶段:
1.客户端将要执行的命令加密发送给服务器。
2.服务器收到后,解密命令,执行后将结果加密返回客户端。
3.客户端将返回结果解密后显示到终端上。

服务端验证客户端

在这里插入图片描述

客户端验证服务端

在这里插入图片描述

加密技术

对称加密

对称密钥加密------共享密钥加密(对称密钥加密):加密和解密同用一个密钥。
加密时就必须将密钥传送给对方,那么如何安全的传输呢 md5加密

非对称加密

非对称密钥加密系统—公开密钥加密(非对称密钥加密):公开密钥加密使用一对非对称的密钥。
一把叫做私有密钥,一把叫做公开密钥。私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。使用此加密方式,发送密文的一方使用公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听盗走。
核心是:算法RSA

对称加密和非堆成加密的区别

在这里插入图片描述

1)非对称加密与对称加密的不同之处在于,为了在单个方向上发送数据,需要两个相关的一组密钥。其中一个密钥称为私钥,而另一个称为公钥。
2)非对称加解密的效率要远远小于对称加解密
3)非对称秘钥相比对称秘钥更加安全

在这里插入图片描述
非对称加密中是用最广泛RSA算法就用到了利用大素数方便生成大整数(2048),但是该大素数则几乎无法分解的特性。最近热门的阿蒂亚老教授宣布证明《黎曼猜想》,就是用关于大素数分布的规律,如果该证明有效,能发现大素数的分布规律,则可能会影响大素数分解,读广泛使用的RSA算法可能产生影响。

趣闻

有意思的是RSA算法曾暴露过一丑闻,数学家们发现,算法中曾经使用的一个随机函数DUAL_EC_DRBG被NSA做了手脚,植入了后门,可以过这个这个算法来推算密钥。NSA利用该算法监控和窃取一些加密信息。
在这里插入图片描述

PFX

公钥加密技术12号标准(PublicKey Cryptography Standards #12,PKCS#12)为存储和传输用户或服务器私钥、公钥和证书指定了一个可移植的格式。它是一种二进制格式,这些文件也称为PFX文件。

  1. CER: 用于存储公钥证书的文件格式
  2. RSA:算法是一种非对称密码算法
  3. PKI(Public Key Infrastructure ) 即"公钥基础设施",是一种遵循既定标准的密钥管理平台,它能够为所有网络应用提供加密和数字签名等密码服务及所必需的密钥和证书管理体系,
    简单来说,PKI就是利用公钥理论和技术建立的提供安全服务的基础设施。PKI技术是信息安全技术的核心,也是电子商务的关键和基础技术。
    /etc/pki/tls/certs
  4. PKI体系能够实现的功能有
身份认证
数据完整性
数据机密性
操作的不可否认性

即使被人截获了信息,也可以根据信息来源判断是否安全。

ssh两种验证级别:openssh openssl

从客户端来看,SSH提供两种级别的安全验证。

  1. 第一种级别(基于口令的安全验证)
    只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
  2. 第二种级别(基于密匙的安全验证)
    需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。

用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒
在这里插入图片描述
在这里插入图片描述

解读ssh默认配置文件

1.#Port 22                                          监听端口,默认监听22端口  【默认可修改】
2.#AddressFamily any                        IPV4和IPV6协议家族用哪个,any表示二者均有
3.#ListenAddress 0.0.0.0                   指明监控的地址,0.0.0.0表示本机的所有地址  【默认可修改】
4.#ListenAddress ::                            指明监听的IPV6的所有地址格式
5.# The default requires explicit activationof protocol 1
6.#Protocol 2                                      使用SSH第二版本,redhat7默认第一版本已拒绝
7.# HostKey for protocolversion 1      一版的SSH支持以下一种秘钥形式
8.#HostKey /etc/ssh/ssh_host_key
9.# HostKeys for protocolversion 2                  使用第二版本发送秘钥,支持以下四种秘钥认证的存放位置:(centos6只支持rsa和dsa两种)
10.HostKey/etc/ssh/ssh_host_rsa_key              rsa私钥认证 【默认】
11.#HostKey /etc/ssh/ssh_host_dsa_key            dsa私钥认证
12.HostKey /etc/ssh/ssh_host_ecdsa_key          ecdsa私钥认证
13.HostKey /etc/ssh/ssh_host_ed25519_key      ed25519私钥认证
14.# Lifetime and size ofephemeral version 1  server key  临时版本1服务器密钥的生存期和大小
15.#KeyRegenerationInterval1h                        秘钥在生器,version1会使用server的pub key 每隔一段时间重新建立一次时间1h
16.#ServerKeyBits 1024        主机秘钥长度
17.# Ciphers and keying
18.#RekeyLimit default none
19.# Logging
20.# obsoletes QuietMode and FascistLogging
21.#SyslogFacility AUTH
22.SyslogFacilityAUTHPRIV                   当有人使用ssh登录系统的时候,SSH会记录信息,信息保存在/var/log/secure里面
23.#LogLevel INFO                                  日志的等级 全部
24.# Authentication:
25.#LoginGraceTime 2m                           登录的宽限时间,默认2分钟没有输入密码,则自动断开连接
26.#PermitRootLogin no
27.PermitRootLogin yes                            是否允许管理员直接登录,'yes'表示允许
28.#StrictModes yes                                 是否让sshd去检查用户主目录或相关文件的权限数据
29.#MaxAuthTries 6                                  最大认证尝试次数,最多可以尝试6次输入密码。之后需要等待某段时间后才能再次输入密码
30.#MaxSessions 10                                 允许的最大会话数
31.#RSAAuthentication yes
32.#PubkeyAuthentication yes
33.# The default is to check both.ssh/authorized_keys and .ssh/authorized_keys2
34.# but this is overridden so installationswill only check .ssh/authorized_keys
35.AuthorizedKeysFile.ssh/authorized_keys                 服务器生成一对公私钥之后,会将公钥放到.ssh/authorizd_keys里面,将公钥发给客户端
36.#AuthorizedPrincipalsFile none
37.#AuthorizedKeysCommand none
38.#AuthorizedKeysCommandUser nobody
39.# For this to work you will also need hostkeys in /etc/ssh/ssh_known_hosts
40.#RhostsRSAAuthentication no
41.# similar for protocol version 2
42.#HostbasedAuthentication no
43.# Change to yes if you don't trust~/.ssh/known_hosts for
44.# RhostsRSAAuthentication andHostbasedAuthentication
45.#IgnoreUserKnownHosts no
46.# Don't read the user's ~/.rhosts and~/.shosts files
47.#IgnoreRhosts yes
48.# To disable tunneled clear text passwords,change to no here!
49.#PasswordAuthentication yes
50.#PermitEmptyPasswords no
51.PasswordAuthentication yes                    是否允许支持基于口令的认证
52.# Change to no to disable s/key passwords
53.#ChallengeResponseAuthentication yes
54.ChallengeResponseAuthentication no     是否允许任何的密码认证
挑战任何的密码认证!所以,任何 login.conf 规定的认证方式,均可适用!
与Kerberos 有关的参数设定!底下不用设定
55.# Kerberos options                                   是否支持kerberos(基于第三方的认证,如LDAP)认证的方式,默认为no
56.#KerberosAuthentication no
57.#KerberosOrLocalPasswd yes
58.#KerberosTicketCleanup yes
59.#KerberosGetAFSToken no
60.#KerberosUseKuserok yes
61.# GSSAPI options
62.GSSAPIAuthentication yes
63.GSSAPICleanupCredentials no
64.#GSSAPIStrictAcceptorCheck yes
65.#GSSAPIKeyExchange no
66.#GSSAPIEnablek5users no
67.# Set this to 'yes' to enable PAMauthentication, account processing,
68.# and session processing. If this isenabled, PAM authentication will
69.# be allowed through theChallengeResponseAuthentication and
70.# PasswordAuthentication. Depending on yourPAM configuration,
71.# PAM authentication viaChallengeResponseAuthentication may bypass
72.# the setting of "PermitRootLoginwithout-password".
73.# If you just want the PAM account andsession checks to run without
74.# PAM authentication, then enable this butset PasswordAuthentication
75.# and ChallengeResponseAuthentication to'no'.
76.# WARNING: 'UsePAM no' is not supported inRed Hat Enterprise Linux and may cause several
77.# problems.
78.UsePAM yes
79.#AllowAgentForwarding yes
80.#AllowTcpForwarding yes
81.#GatewayPorts no
82.X11Forwarding yes
#ssh -X  user@IP
83.#X11DisplayOffset 10
84.#X11UseLocalhost yes
85.#PermitTTY yes
86.#PrintMotd yes
87.#PrintLastLog yes
88.#TCPKeepAlive yes
89.#UseLogin no
90.UsePrivilegeSeparation sandbox # Defaultfor new installations.
91.#PermitUserEnvironment no
92.#Compression delayed
93.#ClientAliveInterval 0
94.#ClientAliveCountMax 3
95.#ShowPatchLevel no
96.#UseDNS yes              是否反解DNS,如果想让客户端连接服务器端快一些,这个可以改为no
97.#PidFile /var/run/sshd.pid
98.#MaxStartups 10:30:100
99.#PermitTunnel no
100.#ChrootDirectory none
101.#VersionAddendum none
102.# no default banner path
103.#Banner none
104.# Accept locale-related environmentvariables
105.AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIMELC_COLLATE LC_MONETARY LC_MESSAGES
106.AcceptEnv LC_PAPER LC_NAME LC_ADDRESSLC_TELEPHONE LC_MEASUREMENT
107.AcceptEnv LC_IDENTIFICATION LC_ALLLANGUAGE
108.AcceptEnv XMODIFIERS
109.# override default of no subsystems
110.Subsystem sftp/usr/libexec/openssh/sftp-server                    支持 SFTP ,如果注释掉,则不支持sftp连接
111.# Example of overriding settings on aper-user basis
112.#Match User anoncvs
113.# X11Forwarding no
114.# AllowTcpForwarding no
115.# PermitTTY no
116.# ForceCommand cvs server
117.AllowUsers user1user2                登录白名单(默认没有这个配置,需要自己手动添加),允许远程登录的用户。如果名单中没有的用户,则提示拒绝登录

ssh特点

ssh服务端由2部分组成:
openssh(提供ssh服务) ,openssl(提供加密的程序)
ssh的客户端可以用 XSHELL,Securecrt,Mobaxterm,window10下的命令行窗口等工具进行连接。

SSH的工作机制

需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器
SSH的加密技术

加密技术:传输过程,数据加密。

  1. SSH1没有对客户端的秘钥进行校验,很容易被植入恶意代码
  2. SSH2增加了一个确认联机正确性的Diffe_Hellman机制,每次数据的传输,Server都会检查数据来源的正确性,避免黑客入侵。
    SSH2支持RSA和DSA密钥
    DSA:digital signature Algorithm 数字签名
    RSA:既可以数字签名又可以加密
SSH功能特点
1.SSH是安全的加密协议,用于远程连接Linux服务器
2.SSH的默认端口是22,安全协议版本是SSH2
3.SSH服务器端主要包含2个服务功能SSH连接和SFTP服务器            xftp         rz
4.SSH客户端包含ssh连接命令和远程拷贝scp命令等                     ssh      scp

ssh基础命令使用

客户端使用ssh
  1. 登录:3种方式
ssh 172.24.8.131
ssh [email protected]
ssh -p 22 [email protected]
  1. 直接执行命令 -->最好全路径
ssh [email protected] ls -l /mnt
==>ssh [email protected] /bin/ls -ltr /backup/data
  1. 查看已知主机
cat /root/.ssh/known_hosts
ssh自带的sftp功能

SecureFile Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法。sftp 与 ftp有着几乎一样的语法和功能。
SFTP 为 SSH的其中一部分,是一种传输档案至 Blogger伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File TransferProtocol)的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多。
windows中可以使用CoreFTP,FileZilla, WinSCP,Xftp来连接SFTP进行上传,下载文件,建立,删除目录等操作。

  1. Window和Linux的传输工具
    wincp filezip
    sftp -->基于ssh的安全加密传输
  2. sftp客户端连接
sftp -o [email protected]
put /etc/hosts /tmp
get /etc/hosts /home/omd
  1. sftp小结:
1.linux下使用命令: sftp -o [email protected]
2.put加客户端本地路径上传
3.get下载服务器端内容到本地
4.远程连接默认连接用户的家目录
客户端scp 跨机远程拷贝

scp是securecopy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。两台主机之间复制文件必需得同时有两台主机的复制执行帐号和操作权限。
scp一般用法

1)本地复制远程文件:(把远程的文件复制到本地)
[email protected]:/val/test/test.tar.gz  /val/test/test.tar.gz
2)远程复制本地文件:(把本地的文件复制到远程主机上)
scp/val/test.tar.gz [email protected]:/val/test.tar.gz
3)本地复制远程目录:(把远程的目录复制到本地)
scp [email protected]:/val/test/ /val/test/
4)远程复制本地目录:(把本地的目录复制到远程主机上)
scp -r./ubuntu_env/ [email protected]:/home/pipi

SSH服务器配置

简单案例

修改ssh服务端口号

#修改ssh服务的端口号,在一定程度上防止他人远程登录,如果不知道端口号就无法远程登录。
[root@localhost ~]# vi /etc/ssh/sshd_config
Port 2222 #17行
#保存退出后

如果在虚拟机测试,可直接关闭防火墙。
添加防火墙允许策略
[root@localhost ~]# firewall-cmd --permanent--add-port=2222/tcp
success
[root@localhost ~]# firewall-cmd --reload
#添加自定义端口到服务
[root@localhost ~]# semanage port -a -tssh_port_t -p tcp 2222
注意:如果执行该命令时出现以下提示,请换个端口再试:
ValueError: Port tcp/4444 alreadydefined

拒绝root用户远程登陆

#请保持服务器上至少有一个可以远程登陆的普通远程账号,root权限无敌,除非保证绝对安全,否则不让远程登录。
#修改配置文件如下:
#打开该选项并修改参数为no
PermitRootLogin no
#重启服务后生效,使用时使用普通用户进行登陆,需要使用root用户时再切换

允许特定用户ssh登陆,其他用户都无法登陆

指定用户登录这样在内网中或互联网中具有一定可靠性

#编辑配置文件,在最后添加如下内容:
AllowUsers USERNAME
USERNAME为你允许登陆的账号,如果是多个用户,中间用空格隔开
#重启ssh服务后生效

SSH免密设置

SSH数据传输时候基本上所有过程都是使用对称密钥来加密。只有在刚开始创建连接阶段和身份认证握手阶段才使用非对称加密。

#创建密钥对
[root@localhost ~]# ssh-keygen -t rsa
ssh-keygen - 生成、管理和转换认证密钥   -t制定类型    RSA

##全敲确定就好  分别是死否保存在指定目录下,和添加密码验证
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
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:mSYMjvS7u9SPA6DpPc3E9tSMekWbLM+g8wP9Ims47ng [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|  . .            |
| ..+ o   +       |
| o..+ + S o      |
|o   .B O B       |
|. . O.B B        |
| ..E X.B +       |
| .+oB+Bo+        |
+----[SHA256]-----+

#证书的目录
/root/.ssh/id_rsa
#默认创建的公钥文件,可以查看一下,都是加密过的。
/root/.ssh/id_rsa.pub

#复制该公钥文件到对端的该目录下:
[root@localhost ~]#ssh-copy-id-I id_dsa.pub  [email protected]
#在本地服务器上登陆对端服务器
[root@web~]# ssh 192.168.168.169



对端进行相同操作:
##创建密钥对
[root@localhost redhat]# ssh-keygen -t rsa   #后加-b 再加密钥长度默认为4096
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:izi8NwIwoMm3geMWT4yCjR/S2G3m5BrIfT6BHvlLnh4 [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|.                |
|=B+.             |
|@*===            |
|+*BB=   S        |
|.++Oo+ . .       |
|. .+OEo .        |
|  ..+*=          |
|    oBo.         |
+----[SHA256]-----+

[root@localhost redhat]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]##拷贝
/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
[email protected]'s password: 

Number of key(s) added: 1

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

##免密登录测试
[root@localhost redhat]# ssh [email protected]
Last login: Thu Apr 16 04:10:35 2020 from 192.168.168.169
[root@localhost ~]# 
[root@localhost ~]# ssh [email protected]
Last login: Thu Apr 16 06:38:21 2020


[root@localhost ~]# ls /root/.ssh/     其中的known_hosts存放的是远程连接的公钥信息。
authorized_keys  id_rsa  id_rsa.pub  known_hosts
[root@localhost ~]#
[root@localhost ~]# cat /root/.ssh/known_hosts
192.168.168.169 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOVZf8DVItj9san0Ktt99oFx4ozyUpKK1IzjqeE3rn32ciVP2xSzbw31q0LfXr/f6JK8KM4P5hnZXk982oD/PfQ=

通过xshell使用证书进行登陆

#使用以下命令创建证书:

[root@localhost ~]# ssh-keygen -t rsa -b 4096
[root@localhost ~]# cp id_rsa.pub authorized_keys
#然后将私钥下载到本地系统,等下用
#如果sftp登陆的时候无法成功,请恢复之前修改的ssh服务配置
#在windows系统上使用xshell创建新会话,使用公钥进行免密登陆
#取消使用密码进行远程登陆
PasswordAuthenticationno
#修改配置文件保存退出,重启服务

ssh小结

1.ssh远程的加密连接协议,相关软件openssh,openssl
2.默认端口22
3.ssh版本协议 ssh2 sslv3
4.服务器ssh连接,ftp连接,sshd守护进程,开机启动
5.ssh客户端重要命令:ssh(用户登录&&远程命令),scp,sftp,
6.安全验证方式:口令,密钥 学习原理
7.ssh服务优化:改端口,no root,no DNS,
8.ssh密钥对,公钥在服务器端,私钥在客户端

如何防止SSH登录入侵

  1. 密钥登录,更改端口
  2. 监听本地内网IP(ListenAddress192.168.25.*)
    修改ssh服务的启动文件sshd的几个点
修改 /etc/ssh/sshd_config      
UseDNS no  加快响应速度因为在内网环境下      
PermitRootLogin no  不运行root用户直接登录     
Port 11544 更改访问端口号      
ListenAddress  192.168.25.130  只监听内网的IP      
Allow User anoncvs     当前环境允许登录的用户      
PermitRootLogin no      是否允许root用户登录,一般不允许开

关于后台的ssh服务

#查询openssl软件     
rpm -qa openssh openssl 

# 查询sshd进程     
ps -ef | grep ssh         
--> /usr/sbin/sshd
 
# 查看ssh端口     
netstat -lntup | grep ssh    
ss | grep ssh                (效果同上,同下,好用)     
netstat -a | grep ssh(记住这个)     
netstat -lnt | grep 22    ==>  查看22端口有没有开/ssh服务有没有开启
技巧: netstat -lnt | grep ssh | wc -l -->只要大于2个这个ssh服务就是好的 

# 查看ssh的秘钥目录     
ll /root/.ssh/known_hosts  # 当前用户家目录的.ssh目录下 

# ssh的配置文件     cat /etc/ssh/sshd_config    
# ssh服务的关闭     service sshd stop 
# ssh服务的开启:     service sshd start 
# ssh服务的重启     service sshd reload    [停止进程后重启] ==> 推荐 
                   service sshd restart   [干掉进程后重启] ==> 不推荐 
    
# ssh远程登录     
ssh 192.168.1.100      # 默认利用当前宿主用户的用户名登录     
ssh [email protected]  # 利用远程机的用户登录     
ssh [email protected]  -o stricthostkeychecking=no # 首次登陆免输yes登录     
ssh [email protected] "ls /home/omd"  # 当前服务器A远程登录服务器B后执行某个命令     
ssh [email protected] -t "sh /home/omd/ftl.sh"  # 当前服务器A远程登录服务器B后执行某个脚本

SSH批量分发与管理方案小结

IT公司企业级批量分发\管理方案(分发,批量部署、执行命令、批量管理),在多用户直接做ssh分发的一些注意点。

  1. 利用root做ssh key验证
    优点:简单,易用
    缺点:安全性能差,无法禁止root远程连接
  2. 利用普通用户omd -->推荐
思路:把要分发的文件拷贝到服务器用户的家目录,然后利用sudo提权拷贝分发的文件和对应目录,修改权限
优点:安全
缺点:复杂,配置麻烦
1.sudo提权
echo 'omd     All=(All)     NOPASSWD:/usr/bin/rsync' >> /etc/sudoers
visudo -c
grep omd /etc/sudoers
2.ssh分发到服务器的家目录
ssh -p22 -r /etc/hosts [email protected]:~
3.ssh使用sudo复制到目标服务器的/etc
ssh -t [email protected] sudo rsync hosts /etc/
  1. 拓展方案2,不用sudo,而是设置suid对固定命令授权
优点:相当安全
缺点:复杂,安全性较差,任何人都可以处理带有suid权限的命令
1.which rsync
2.chmod 4755 /usr/bin/rsync

在行进时,也时时有人退伍,有人落荒,有人颓唐,有人叛变,然而只要无碍于进行,则越到后来,这队伍也就越成为纯粹、精锐的队伍了。

点个赞再走,给创作者一点动力吧!

猜你喜欢

转载自blog.csdn.net/qq_42707739/article/details/105543746
今日推荐