SSH概述与配置文件说明

28365-365体育投注 admin 2025-08-10 19:25:37

一、什么是SSH?简单说,SSH是一种网络协议,用于计算机之间的加密登录。在出现SSH之前,系统管理员需要登入远程服务器执行系统管理任务时,都是用telnet来实现的,telnet协议采用明文密码传送,在传送过程中对数据也不加密,很容易被不怀好意的人在网络上监听到密码。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。需要指出的是,SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。二、首先了解下对称加密(也称为秘钥加密),非对称加密(也称公钥加密)所谓对称加密,指加密解密使用同一套秘钥。对称加密的加密强度高,很难破解。但是在实际应用过程中不得不面临一个棘手的问题:如何安全的保存密钥呢?尤其是考虑到数量庞大的Client端,很难保证密钥不被泄露。一旦一个Client端的密钥被窃据,那么整个系统的安全性也就不复存在。为了解决这个问题,非对称加密应运而生。非对称加密有两个密钥:“公钥”和“私钥”。公开的密钥称为公钥,不公开的密钥称为私钥,两个密钥的特性:公钥加密后的密文,只能通过对应的私钥进行解密。而通过公钥推理出私钥的可能性微乎其微。也可以通过私钥进行加密,在通过公钥进行密码,这种方式多用于数字签名。远程Server收到Client端用户TopGun的登录请求,Server把自己的公钥发给用户。Client使用这个公钥,将密码进行加密。Client将加密的密码发送给Server端。远程Server用自己的私钥,解密登录密码,然后验证其合法性。通过验证结果,给Client相应的响应。私钥是Server端独有,这就保证了Client登录信息即使在网络传输过程中被窃取,也没有私钥进行解密,保证了数据的安全性,这充分利用了非对称加密的特性在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等。不同算法的实现机制不同,可参考对应算法的详细资料。在非对称加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)、ECDSA(椭圆曲线数字签名算法)等。不同算法的实现机制不同,可参考对应算法的详细资料。三、SSH两种方式的用户登录认证:SSH连接是CS模型(客户端-服务器),客户端发出连接申请,服务器对客户端进行验证,再考虑是否接受连接申请。SSH的安全加密方式的理论基础是非对称加密体系1、基于password: 只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。大致流程:客户端发起ssh请求,服务器会把自己的公钥发送给用户用户会根据服务器发来的公钥对密码进行加密加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功1.1、如果通过ssh命令第一次登录对方主机,系统会出现下面的提示:客户端是debian9.5系统=====================================================================================laopi@debian:~$ ssh root@192.168.1.82The authenticity of host '192.168.1.82 (192.168.1.82)' can't be established.RSA key fingerprint is SHA256:x+yJlwiVM1tzFvSmHFMwiWX7s6Jhf8CZE37pq6/FHrw.Are you sure you want to continue connecting (yes/no)? =====================================================================================客户端是CentOS5.9系统=====================================================================================[root@CentOS ssh]# ssh root@192.168.1.82The authenticity of host '192.168.1.82 (192.168.1.82)' can't be established.RSA key fingerprint is ea:a6:60:d4:51:c3:44:fc:7b:9c:6e:4b:1b:6f:5b:89.Are you sure you want to continue connecting (yes/no)?=====================================================================================这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?所谓"公钥指纹",是指公钥长度较长,这里采用RSA算法,长达2048位,很难比对,所以debian9.5系统采用的是SHA256算法对其进行计算,将它变成一个256位的指纹。上例中是x+yJlwiVM1tzFvSmHFMwiWX7s6Jhf8CZE37pq6/FHrw。而CentOS5.9系统是对其进行MD5计算,将它变成一个128位的指纹。上例中是ea:a6:60:d4:51:c3:44:fc:7b:9c:6e:4b:1b:6f:5b:89,通过指纹进行比较,就容易多了。很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?我们可以事先在远程的服务器上通过下面的命令:# ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub查看一下公钥的指纹是啥,然后记录下来,当客户端这里首次连接的时候就可以进行比对,就可以确定要登录的主机是不是自己想登录的。1.2、这里还需要说明下,debian9.5等系统所用的是新版本的 ssh-keygen -lf 缺省输出的是 sha256 格式的指纹,如果想看 md5 的输出需要加上 -E md5命令格式为:================================================================# ssh-keygen -E md5 -lf /etc/ssh/ssh_host_rsa_key.pub=================================================================上面生成的密钥对都是通过RSA算法生成的,有的发行版也许算法不是 RSA ,而是 DSA或ECDSA 之类的,寻找对应公钥文件的时候需要注意一下,又有一个问题系统默认的密钥对在哪里,又是那些文件?默认情况下密钥对都在/etc/ssh/目录下,包括不同算法的公钥,私钥,后面会对/etc/ssh/目录下的文件进行进一步说明。当我们决定接受这个远程主机的公钥的时候输入yes回车:==============================================================================laopi@debian:~$ ssh root@192.168.1.82The authenticity of host '192.168.1.82 (192.168.1.82)' can't be established.RSA key fingerprint is SHA256:x+yJlwiVM1tzFvSmHFMwiWX7s6Jhf8CZE37pq6/FHrw.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '192.168.1.82' (RSA) to the list of known hosts.root@192.168.1.82's password: ===============================================================================上面出现的一句提示,表示host主机已经得到认可,然后,会要求输入密码。如果密码正确,就可以登录了。当远程主机的公钥被接受以后,它就会被保存在用户主目录下的.ssh目录中的known_hosts文件中(~/.ssh/known_hosts)。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。每个SSH用户都有自己的known_hosts文件。此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。1.3、known_hosts可以保存多个公钥文件,每个访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts文件中,通过下面的方法查看:==============================================================================================laopi@debian:~/.ssh$ ssh-keygen -E md5 -lf known_hosts 2048 MD5:ea:a6:60:d4:51:c3:44:fc:7b:9c:6e:4b:1b:6f:5b:89 192.168.1.82 (RSA)256 MD5:64:d6:56:fa:48:78:2c:27:2c:a4:27:9c:70:31:13:98 192.168.1.80 (ECDSA)==============================================================================================通过上面的方法可以查看每个公钥的指纹,并且可以知道每个公钥的加密方式,上面两个公钥分别是通过RSA 2048位加密和ECDSA 256位加密。===============================================================================================laopi@debian:~/.ssh$ cat known_hosts 192.168.1.82 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA159Qo8XpaqG6WAC7r33wIInBCGWeux/Bun7LYu28U/Vt2CrSSbqoakTUBdS7Gsn8Kj9ZQ55qW/dSwkBMthTaAd3W5X+jtLKymjfSWTLxzlBaX52q64YHop/mA2o88KgVZt/aNOS3iMrD5PI2xXcnUSms2CK6Ps1rWR83QEWorqrY3A/SRWNU0mwNAMOXX55KBQjS06kdbpmnv5csIBxODJi0C5hjfCuWxfXyibZlra4VXW4JAI4Fxo+v9nYK2DWd6bfGS3FRYPuoy0hzAI1WqmzSb+3M4RF81JjZOMZT0yT5BR1RlwX9+32WerO9v2T2PceYdBGY3dtxMLvwouLz7Q==192.168.1.80 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBATw5wuZnAwuiX6XrwcHcgHnrha9xPqt739GKTl5cSjkn4mxr7STy4bimus/Wd7lOcEZ1C0SlzmZOINQ3TtICuQ=laopi@debian:~/.ssh$ ================================================================================================通过上面的方法是直接查看known_hosts文件的内容,可以看到两个主机的IP地址和公钥密文。如果远程的服务器重新安装系统,或其他原因使公钥消失,而管理机器的笔记本公钥信息还在,公钥不同,连接就会出现错误。问题处理的方法:方法一:直接删除known_hosts文件rm -rf ~/.ssh/known_hosts优点:干净利索缺点:把其他正确的公钥信息也删除,下次链接要全部重新经过认证方法二:在文件中直接删除对应ip的相关rsa公钥信息或其他公钥信息。vi ~/.ssh/known_hosts优点:其他正确的公钥信息保留缺点:还要vi,还要找到对应信息,稍微优点繁琐方法三:通过命令删除对应ip的相关rsa公钥信息或其他公钥信息。ssh-keygen -R 192.168.0.100优点:快、稳、狠缺点:没有缺点1.4、当通过ssh命令登录的时候,如果指纹不是md5的形式而是SHA256的怎么对比,理论应该有两个方法,第一种是在服务器上查看公钥的SHA265的指纹是多少,这种方式两边得到的指纹不一样,不成功不知道为什么,第二种方法是在当我们通过ssh命令登录的时候,决定接受这个远程主机的公钥输入yes回车,回车后不要输入密码登录,而是按Ctrl+C组合键中止会话,这时候也会生成~/.ssh/known_hosts文件,我们可以通过known_hosts文件得到对应的指纹,因为远程服务器的公钥已经保存在这个文件中,命令如下:==============================================================laopi@debian:~/.ssh$ ssh-keygen -E md5 -lf known_hosts==============================================================通过上面的命令得到的指纹就可以和远程服务器的公钥指纹进行比较了。 1.5、ssh命令最基本的用法SSH主要用于远程登录。假定你要以用户名user,登录远程主机192.168.0.100,只要一条简单命令就可以了。laopi@debian:~$ ssh user@192.168.0.100或laopi@debian:~$ ssh -l user 192.168.0.100如果本地用户名与远程用户名一致,登录时可以省略用户名。laopi@debian:~$ ssh 192.168.0.100SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。laopi@debian:~$ ssh -p 2222 user@192.168.0.100laopi@debian:~$ ssh -p 2222 -l user 192.168.0.1002、中间人攻击SSH之所以能够保证安全,原因在于它采用了公钥加密。在重复下密码登录的方式(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的”中间人攻击”(Man-in-the-middle attack)。SSH协议是如何应对的呢?就是通过基于密钥的登录方式登录。3、基于密钥的登录方式: 需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。大致流程:首先在客户端生成一对密钥并将客户端的公钥ssh-copy-id拷贝到服务器端当客户端再次发送一个连接请求,包括ip、用户名服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,服务器就会发出“质询”(challenge)表现为一串随机字符,如:abcd。服务端将使用客户端拷贝过来的公钥对“质询”进行加密,然后发送给客户端得到服务端发来“质询”后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录两种登录认证的对比:基于密钥的认证方式,用户必须指定自己密钥的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程会比基于passwd认证稍长,可能需要10秒四、OpenSSH配置文件OpenSSH常用配置文件有两个/etc/ssh/ssh_config 和 /etc/ssh/sshd_configssh_config 为客户端配置文件,sshd_config 为服务端配置文件,此外/etc/ssh/目录中还有一些其他文件,对这些文件进行下说明:moduli # 配置用于构建安全传输层 所必须的密钥组 ssh_host_ecdsa_key #SSH2版本所使用的ecdsa私钥ssh_host_ecdsa_key.pub #SSH2版本所使用的ecdsa公钥ssh_host_ed25519_key #SSH2版本所使用的ed25519私钥ssh_host_ed25519_key.pub #SSH2版本所使用的ed25519公钥ssh_host_rsa_key #SSH2版本所使用的RSA私钥ssh_host_rsa_key.pub #SSH2版本所使用的RSA公钥

相关文章

邮政手机银行数字钱包的全面解析与用户指南

剪卡器十大品牌排行榜

黄鹤楼天下名楼香烟价格 黄鹤楼香烟天下名楼多少钱一盒

详解奶瓶重力球的五大作用,有效防止宝宝呛奶

生化危机系列

魔兽世界8.0猎人怎么样 猎人新版本改动变化介绍分析

windows、linux系统如何判断当前计算机是物理机还是虚拟机

12g运存能用得了四年吗

如何拆卸室内门:为什么要拆卸、需要哪些工具以及对圆形或推式把手、门闩、门锁和铰链的分析