关于SSH的那些事
SSH: Secure Shell Protocol (安全外壳协议)
Secure Shell,又可记为安全外壳协议(SSH)
Secure Shell,又可记为安全外壳协议(SSH),最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台,是一种在不安全网络上提供安全远程登录及其它安全网络服务的协议,SSH协议可以用来进行远程控制,或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、rlogin、rsh都是极为不安全的,并且会使用明文传送密码。
SSH是一个好的应用程序,在正确使用时,它可以弥补网络中的漏洞。除此以外, SSH之所以流行,还有以下更关键原因:
1.SSH客户端适用于多种平台。
2.对非商业用途它是免费的。
3.通过SSH可以把传输的数据进行加密,防止“中间人(man-in-the-middle)”攻击,还能防止DNS和IP欺骗,同时SSH能够对数据进行压缩,可以加快传输的数据速度,甚至可以为ppp提供一个安全的“通道”。
4.UNIX版本提供了源代码,这意味着任何人都可以对它进行修改或b u g修补来提高其性能,甚至还可以增加功能,而我们现在linux中常用openssh的就是ssh的免费开源版本。(以下内容提到的SSH工具是OpenSSH)
注:最初SSH是由芬兰的一家公司开发的。由于受版权和加密算法的限制,所以现在很多人使用OpenSSH。SSH由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。 用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。 |
OpenSSH服务,sshd,是一个典型的独立守护进程(standalone daemon),但也可以根据需要通过网络守护进程(Internet Daemon)-inetd或Ineternet Daemon's more modern-xinted加载。OpenSSH服务可以通过/etc/ssh/sshd_config文件进行配置。OpenSSH提供了服务端后台程序和客户端,用来加密远程控制和文件传输过程中的数据,并由此来代替原来的类似服务,各自功能如下:
服务端:它是一个守护进程(demon),他在后台运行并响应来自客户端的连接请求。服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接。
客户端:包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。
OpenSSH程序主要包括了几个部分:
ssh:rlogin与Telnet的替代方案。
scp、sftp:rcp的替代方案,将文件复制到其他电脑上。
sshd:SSH服务器。
ssh-keygen:产生RSA或DSA密钥,用来认证用。
ssh-agent、ssh-add:帮助用户不需要每次都要输入密钥密码的工具。
ssh-keyscan:扫描一群机器,并记录其公钥。
SSH的工作原理:
传输层协议 [SSH-TRANS] 提供了服务器认证,保密性及完整性。此外它有时还提供压缩功能。 SSH-TRANS 通常运行在 TCP/IP连接上,也可能用于其它可靠数据流上。 SSH-TRANS 提供了强力的加密技术、密码主机认证及完整性保护。该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上。
用户认证协议 [SSH-USERAUTH] 用于向服务器提供客户端用户鉴别功能。它运行在传输层协议 SSH-TRANS 上面。当 SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希 H )。会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。 SSH-USERAUTH 也需要知道低层协议是否提供保密性保护。
连接协议 [SSH-CONNECT] 将多个加密隧道分成逻辑通道。它运行在用户认证协议上。它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接。
目前SSH常用两种级别的安全验证:
第一种:通过口令的安全验证,只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密, 但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,例如受到“中间人”的攻击。
第二种:通过密钥的安全验证,一旦建立一个安全传输层连接,客户机就发送一个服务请求。当用户认证完成之后,会发送第二个服务请求。这样就允许新定义的协议可以与上述协议共存。连接协议提供了用途广泛的各种通道,有标准的方法用于建立安全交互式会话外壳和转发(“隧道技术”)专有 TCP/IP 端口和 X11 连接。简单说就是首先创建一个密钥,然后将其中的公钥放在需要访问的服务器中,如果想连接远程SSH服务器,客户端就会向服务器发出请求,用你的密钥进行安全验证,服务器收到请求之后,会对从客户端发送过来的公钥进行匹配,公钥匹配一致后,服务器会用公钥加密“质询”(challenge)并把它发送给客户端。 客户端收到“质询”之后就可以用你的私钥解密然后把它发送给服务器。
注:第二种级别不仅加密所有传送的数据,同时“中间人”无法攻击到你(因为他没有你的私人密匙),同样整个登录的过程就需要更长时间。而且S S H也支持一些其他的身份认证方法,如Kerberos和安全ID卡等。 注:启动SSH服务器后,sshd运行起来并在默认的22端口进行监听,SSH就将一直等待连接请求。当请求到来的时候SSH守护进程会产生一个子进程,该子进程进行这次的连接处理。(SSH可以通过inetd上的tcpd来运行) |
服务器配置文件详解 :vim /etc/ssh/sshd_conf
#Port 22
#port用来设置sshd监听的端口,为了安全起见,建议更改默认的22端口为5位以上陌生端口
#AddressFamily any
#指定运行时使用的协议簇:
#inet:使用 IPV4 协议簇,为默认值。
#inet6:使用 IPV6 协议簇。
#any:同时启用 IPV4 和 IPV6 协议簇。
#ListenAddress用来设置sshd服务器绑定的IP地址,不设置的话,默认预设所有接口均接受SSH
#ListenAddress 0.0.0.0
#ListenAddress ::
#sshd版本2
#Protocol 2
#设置包含计算机私人密匙的文件
HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
#日志
# Logging
#SyslogFacilityAUTH
SyslogFacilityAUTHPRIV #日志Facility为AUTHPRIV
#LogLevel INFO #日志级别
# Authentication:
#LoginGraceTime 2m #表示认证的时限(以秒为单位)
#PermitRootLogin yes #root能不能用ssh登录
#StrictModes yes #ssh在接收登录请求之前是否检查用户家目录和rhosts文件的权限和所有权
#MaxAuthTries 6 #只允许输错几回密码
#MaxSessions 10 #最大支持几个ssh会话
#密钥认证
PubkeyAuthentication yes #支持密钥的方式连接
AuthorizedKeysFile .ssh/authorized_keys #密钥文件存放路径
#主机验证
#AuthorizedPrincipalsFile none
#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHostsyes
# Don't read theuser's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
#口令验证
# To disabletunneled clear text passwords, change to no here!
#PasswordAuthentication no #是否开启身份验证
#PermitEmptyPasswords no #是否允许用口令为空的帐号登录
PasswordAuthentication no #是否使用口令验证
#是否开启挑战响应身份验证
# Change to no todisable s/key passwords
#ChallengeResponseAuthenticationyes
ChallengeResponseAuthenticationno
#Kerberos身份验证
# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
#KerberosUseKuserok yes
#GSSAPI是公共安全事务应用程序接口(GSS-API)
#公共安全事务应用程序接口以一种统一的模式为使用者提供安全事务,由于它支持最基本的机制和技术,所以保证不同的应用环境下的可移植性.该规范定义了GSS-API事务和基本元素,并独立于基本的机制和程序设计语言环境,并借助于其它相关的文档规范实现.
# GSSAPI options
GSSAPIAuthentication yes #是否允许使用基于GSSAPI 的用户认证.仅用于SSH-2
GSSAPICleanupCredentials no #是否在用户退出登录后自动销毁用户凭证缓存。
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
#GSSAPIEnablek5users no
#SSH服务端的的PAM认证
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
# WARNING: 'UsePAM no' is not supported in Red Hat Enterprise Linux and may cause several
# problems.
UsePAM yes #是否加载/etc/pam.d/sshd
#转发
#AllowAgentForwarding yes
#如果采用本地转发方式,AllowTcpForwarding选项是no,则不允许转发.
#如果采用远程转发方式,AllowTcpForwarding选项是no,则不允许转发.
#AllowTcpForwarding yes
#远程主机连接本地转发端口
#GatewayPorts no #是否允许远程主机连接本地的转发端口
#X11转发允许在 SSH 客户端上显示应用程序的图形部分,而程序逻辑依然在远程服务器上执行.
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#允许或禁止登陆用户、组
#PermitTTY yes
#PrintMotd yes #登录后显示/etc/motd中的信息
#PrintLastLog yes #成功登录后显示最后一位用户的登录信息
TCPKeepAlive yes #是否持续发送tcp包,维持连接
#UseLogin no #是否使用ssh服务端的login程序进行登录验证
#UsePrivilegeSeparation sandbox #SSH服务端通过创建非特权子进程处理接入请求的方法来进行权限分离
#PermitUserEnvironment no
#Compressiondelayed #压缩选项yes
#连接超时断开连接
#ClientAliveInterval 0 #设置一个以秒记的时长,如果超过这么长时间没有收到客户端的任何数据,sshd 将通过安全通道向客户端发送一个"alive"消息,并等候应答.
#ClientAliveCountMax3 #sshd在未收到任何客户端回应前最多允许发送多少个"alive"消息,到达这个上限后,sshd 将强制断开连接,关闭会话
#ShowPatchLevel no #在连接ssh端口时,是否返回SSH的补丁版本信息
#UseDNS yes #是否对远程主机名进行反向解析,以检查此主机名是否与其IP地址真实对应.
#PidFile/var/run/sshd.pid #pid文件存放位置
#这个选项一定要配合LoginGraceTime选项一起使用.
#MaxStartups10:30:100 #允许有多少次验证连接请求
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none
# no defaultbanner path
#Banner none #登录之前显示在用户屏幕上,后面跟着文件位置
#指定客户端发送的哪些环境变量将会被传递到会话环境中
# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
#配置一个外部的子系统,仅用于SSH-V2协议,一般这里使用sftp
# override defaultof no subsystems
Subsystem sftp /usr/libexec/openssh/sftp-server
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
关于SSH的那些事的更多相关文章
- ssh 框架整合事,使用注解,action提示找不到
There is no Action mapped for namespace [/] and action name [/select] associated with context path [ ...
- Linux禁用root账户ssh登录
前言 今天登录服务器的时候,控制台输出如下信息 There were 48990 failed login attempts since the last successful login. Last ...
- CentOS7安全设置 yum-cron系统自动更新,firewalld防火墙简单使用
PermitRootLogin nosystemctl restart sshd.service; yum -y install firewalld; systemctl start firewall ...
- java.langThrowable:STACKTRACE
Jboss版本是4.2.0.GA代码运行完后总报错 但是程序的运行结果没问题 请问下这是什么原因2009-12-11 01:53:26,611 INFO [org.jboss.resource.co ...
- 阿里云ECS每天一件事D1:配置SSH
近期因为项目需求,采购了两台阿里云ECS,选择的系统为CentOS 6.3 X64 安全加固版,额外买了160G的硬盘,应该够应付此项目的需求了. ECS默认已经配置好了sshd服务,可以使用root ...
- 让一个端口同时做两件事:http/https和ssh
相信很多人都在YY:能不能让80端口分析连接协议,如果是http协议就让服务器交给http服务程序(如Apache.Nginx等)处理,如果是ssh协议就交给ssh服务程序(如OpenSSH Serv ...
- SSH Config 那些你所知道和不知道的事 (转)
原文地址:https://deepzz.com/post/how-to-setup-ssh-config.html SSH(Secure Shell)是什么?是一项创建在应用层和传输层基础上的安全协议 ...
- 局域网内主机ssh访问服务器宿主下VMWare 虚拟机(Ubuntu 12.04.1)并且实现虚拟机能上网的那点事
(1)首先虚拟机已安装ssh服务 1) 自动安装 ssh 服务 apt-get install openssh-server 安装完成后,将自动开启 ssh 服务. 2) 查看 ssh 服务是否已开启 ...
- 糗事之 -- 用ssh公钥实现免密码登录
前言:工作原因,每天都会登录好多次服务器,每次都是ssh root@192.168..... 然后输入密码,来来回回输几次真是很烦啊. 问题:怎么可以在每次ssh连接服务器时不用输入密码,直接登录? ...
随机推荐
- pandas的apply操作
pandas的apply操作类似于Scala的udf一样方便,假设存在如下dataframe: id_part pred pred_class v_id 0 d [0.722817, 0.650064 ...
- Python3中性能测试工具Locust安装使用
Locust安装使用: 安装: python3中 ---> pip3 install locust 验证是否安装成功---> 终端中输入 locust --help ...
- 关闭 Mac 拼写自动纠正与横线转换
如果你是个程序员, 如果你恰好用 mac 自带的 notes 来做笔记, 很大可能性, 你会在里面贴代码, 但是, Mac 的拼写检查和自动纠正功能,会把代码变成你不想要的样子, 比如, 它会为你首字 ...
- 手撸GitLab CI(阉割版)
上一集我们说到如何从零开始搭建一个Vue-cli 3.0的项目,而这一集我们将说到如何手写一份阉割版的CI脚本. 首先说一下GitLab部署到服务器的操作,一般有两种,一种是规范化分离的,包含runn ...
- 2.3Options建立配置和实体的映射「深入浅出ASP.NET Core系列」
希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. Startup.cs中创建MVC中间件 关键代码:services.AddMvc();app.UseMvcWith ...
- 初步认识Swiper_前端交互控制神器_滚动3D切换等特效简单制作
前言: 本人在项目的工作中负责研发,页面及交互基本都是交给前端去做的.以前前端写的东西大概都知道,都是一些JS,CSS和HTML等的一些基本控制,都懂!但是今天前端突然做了一个具有特殊效果的DOM:页 ...
- DevOps实例
DevOps实例 ------------------------------------------------------------------ 今天先到这儿,希望对您DevOPS, 技术领导力 ...
- JFreeChart画图+jsp页面显示实现统计图
1 开发环境: 1.eclipse(可替换) 2.jfreechart-1.0.19 2 说明: (1) source目录:为 jfreechart的源码目录:不会的主要看这里.因为他的文档是收费的. ...
- Biorhythms(poj1006+中国剩余定理)
Biorhythms Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 117973 Accepted: 37026 Des ...
- js中关于两个变量的比较
今天在匆忙的写代码过程中,测试突然跑过来跟我说,有一个小的bug,但是不能完全的复现,但确实存在.需要我们这边参与查找.首先来说一下我们这个的业务逻辑,其实非常的简单,就是一个开房间的后台,里面有一项 ...