OpenSSH这一术语指系统中使用的Secure Shell 软件的软件实施。OpenSSH Secure Shell(SSH)用于在远程系统上安全运行shell。如果你在可提供ssh服务的远程Linux系统中拥有用户账户,则ssh是通常用来远程登录到该系统的命令。ssh命令也可以用于在远程系统中运行各个命令。
远程连接服务器通过文字或图形接口方式来远程登录系统,让你在远程终端前登录linux主机以取得可操作主机接口(shell),而登录后的操作感觉就像是坐在系统前面一样。
SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程 序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
SSH为了确保信息的安全传输,从连接发起到完成各阶段的各个点SSH协议采用了许多不同类型的数据加密技术,包括可逆的对称加密,非对称加密以及不可逆的哈希散列。
CA:
CA的作用
什么是证书?
证书可以应用于
证书发放过程
公钥加密技术12号标准(Public Key Cryptography Standards #12,PKCS#12)为存储和传输用户或服务器私钥、公钥和证书指定了一个可移植的格式。它是一种二进制格式,这些文件也称为PFX文件。
CER: 用于存储公钥证书的文件格式
RSA:算法是一种非对称密码算法
PKI(Public Key Infrastructure ) 即"公钥基础设施",是一种遵循既定标准的密钥管理平台,它能够为所有网络应用提供加密和数字签名等密码服务及所必需的密钥和证书管理体系,简单来说,PKI就是利用公钥理论和技术建立的提供安全服务的基础设施。PKI技术是信息安全技术的核心,也是电子商务的关键和基础技术。
PKI体系能够实现的功能有
从客户端来看,SSH提供两种级别的安全验证。
第一种级别(基于口令的安全验证)
只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
第二种级别(基于密匙的安全验证)
需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒 [2] 。
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 activation of protocol 1
6.#Protocol 2 使用SSH第二版本,centos7默认第一版本已拒绝
7.# HostKey for protocol version 1 一版的SSH支持以下一种秘钥形式
8.#HostKey /etc/ssh/ssh_host_key
9.# HostKeys for protocol version 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 of ephemeral version 1 server key
15.#KeyRegenerationInterval 1h
16.#ServerKeyBits 1024 主机秘钥长度
17.# Ciphers and keying
18.#RekeyLimit default none
19.# Logging
20.# obsoletes QuietMode and FascistLogging
21.#SyslogFacility AUTH
22.SyslogFacility AUTHPRIV 当有人使用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 installations will 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 host keys 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 and HostbasedAuthentication
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 是否允许任何的密码认证
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 PAM authentication, account processing,
68.# and session processing. If this is enabled, PAM authentication will
69.# be allowed through the ChallengeResponseAuthentication and
70.# PasswordAuthentication. Depending on your PAM configuration,
71.# PAM authentication via ChallengeResponseAuthentication may bypass
72.# the setting of "PermitRootLogin without-password".
73.# If you just want the PAM account and session checks to run without
74.# PAM authentication, then enable this but set PasswordAuthentication
75.# and ChallengeResponseAuthentication to 'no'.
76.# WARNING: 'UsePAM no' is not supported in Red 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 # Default for 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 environment variables
105.AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
106.AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
107.AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
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 a per-user basis
112.#Match User anoncvs
113.# X11Forwarding no
114.# AllowTcpForwarding no
115.# PermitTTY no
116.# ForceCommand cvs server
117.AllowUsers user1 user2 登录白名单(默认没有这个配置,需要自己手动添加),允许远程登录的用户。如果名单中没有的用户,则提示拒绝登录
服务器启动的时候自己产生一个密钥(768bit公钥),本地的ssh客户端发送连接请求到ssh服务器,服务器检查连接点客户端发送的数据和IP地址,确认合法后发送密钥(768bits)给客户端,此时客户端将本地私钥(256bit)和服务器的公钥(768bit)结合成密钥对key(1024bit),发回给服务器端,建立连接通过key-pair数据传输。
加密技术:传输过程,数据加密。
客户端 ssh
ssh 172.24.8.131
ssh [email protected]
ssh -p 22 [email protected]
2.直接执行命令 -->最好全路径
ssh [email protected] ls -l /mnt
==>ssh [email protected] /bin/ls -ltr /backup/data
3.查看已知主机
cat /root/.ssh/known_hosts
ssh自带的sftp功能
sftp -oPort=22 [email protected]
put /etc/hosts /tmp
get /etc/hosts /home/omd
1.linux下使用命令: sftp -oPort=22 [email protected]
2.put加客户端本地路径上传
3.get下载服务器端内容到本地
4.远程连接默认连接用户的家目录
scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。两台主机之间复制文件必需得同时有两台主机的复制执行帐号和操作权限。
scp一般用法
scp [email protected]:/val/test/test.tar.gz /val/test/test.tar.gz
scp /val/test.tar.gz [email protected]:/val/test.tar.gz
scp -r [email protected]:/val/test/ /val/test/
scp -r ./ubuntu_env/ [email protected]:/home/pipi
13.#### 案例
附加
添加防火墙允许策略
[root@web ~]# firewall-cmd --permanent --add-port=2222/tcp
success
[root@web ~]# firewall-cmd --reload
#添加自定义端口到服务
[root@web ~]# semanage port -a -t ssh_port_t -p tcp 2222
注意:如果执行该命令时出现以下提示,请换个端口再试:
ValueError: Port tcp/4444 already defined
私钥/root/.ssh/id_rsa
公钥/root/.ssh/id_rsa.pub
制该公钥文件到对端的该目录下:
1)[root@web ~]# scp /root/.ssh/id_rsa.pub [email protected]:/root/.ssh/authorized_keys
在本地服务器上登陆对端服务器
[root@web ~]# ssh 192.168.8.138
2)ssh-copy-id -i /root/.ssh/id_dsa.pub [email protected]
在本地服务器上登陆对端服务器
[root@web ~]# ssh 192.168.40.132
使用以下命令创建证书:
[root@web ~]# ssh-keygen -t rsa -b 4096
[root@web .ssh]# cp id_rsa.pub authorized_keys
#然后将私钥下载到本地系统,等下用
#如果sftp登陆的时候无法成功,请恢复之前修改的ssh服务配置
#在windows系统上使用xshell创建新会话,使用公钥进行免密登陆
#取消使用密码进行远程登陆
修改sshd_config配置文件
vi /etc/ssh/sshd_config
PubkeyAuthentication yes #启用公告密钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys #设定PublicKey文件路径
RSAAuthentication yes #允许RSA密钥
PasswordAuthentication no #禁止密码验证登录,如果启用的话,RSA认证登录就没有意义了
#禁用root账户登录,非必要,但为了安全性,请配置
修改配置文件保存退出,重启服务
修改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用户登录,一般不允许开