当前位置: 首页 > Linux

SSH原理与应用

时间:2023-04-06 03:28:58 Linux

本文档介绍了SSH的原理与应用。这是企业级非常实用的技术。我希望它可以帮助你。一、SSH简介SSH是SecureShell的缩写,也称为SecureShellProtocol。SSH的主要目的是启用安全的远程登录。2、SSH的工作原理SSH的安全性比较好。加密数据的方式主要有两种:对称加密(密钥加密)和非对称加密(公钥加密)。对称加密是指加密和解密使用同一组密钥。客户端将密钥加密后发送给服务器端,服务器端使用同一组密钥进行解密。对称加密具有较高的加密强度,不易破解。但是客户端数量庞大,很难保证密钥不泄露。如果出现客户端密钥泄露,那么整个系统的安全性就存在严重的漏洞。为了解决对称加密的漏洞,产生了非对称加密。非对称加密有两个密钥:“公钥”和“私钥”。用公钥加密的密文只能用对应的私钥解密。从公钥推导出私钥几乎是不可能的,所以非对称加密的安全性比较高。在SSH的加密原理中,使用了RSA非对称加密算法。整个过程如下:(1)远程主机收到用户的登录请求,将自己的公钥发送给用户。(2)用户用这个公钥对登录密码进行加密后发回。(3)远程主机使用自己的私钥解密登录密码,如果密码正确,则允许用户登录。3.中间人攻击SSH之所以能保证安全是因为它使用公钥加密。这个过程本身是安全的,但在实际使用中存在风险:如果有人拦截登录请求并冒充远程主机,就会伪造公钥的公钥发送给用户,因此很难被用户辨别真伪。因为与https协议不同,SSH协议的公钥是不经过证书颁发机构(CA)公证的,是自己颁发的。如果攻击者插在用户和远程主机之间(比如在公共wifi区域),可以用伪造的公钥获取用户的登录密码。然后用这个密码登录远程主机,那么SSH的安全机制就不存在了。这种风险被称为“中间人攻击”。那么SSH协议是如何处理的呢?4、密码登录如果是第一次登录远程机器,会出现如下提示:$sshuser@hostTheauthenticityofhost'host(12.18.429.21)'can'tbeestablished.RSAkeyfingerprint是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d。您确定要继续连接吗(是/否)?因为公钥长度较长(使用RSA算法,最大1024位),比较困难,所以对其进行MD5计算,变成128位的指纹。比如98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,比较起来就容易多了。比较后,如果用户接受了远程主机的公钥,系统会提示:警告:已将'host,12.18.429.21'(RSA)永久添加到已知主机列表中。这意味着主机已被批准。然后输入登录密码登录。当远程主机的公钥被接受后,它被存储在文件~/.ssh/known_hosts中。下次连接这台主机时,系统会识别到它的公钥已经保存在本地,跳过警告部分,直接提示输入密码。每个SSH用户都有自己的known_hosts文件。另外,系统还有这样一个文件,通常是/etc/ssh/ssh_known_hosts,里面存放着一些对所有用户来说都是可靠的远程主机的公钥。5.公钥登录使用密码登录,每次都要输入密码,很麻烦。好在SSH还提供了公钥登录,可以省去输入密码的步骤。所谓“公钥登录”,原理很简单,就是用户将自己的公钥存储在远程主机上。登录时,远程主机会发送一个随机字符串给用户,用户用自己的私钥加密后发回。远程主机使用预先存储的公钥解密。如果成功,证明用户是可信的,直接允许登录shell,不需要密码。此方法要求用户提供自己的公钥。如果没有现成的,可以直接使用ssh-keygen生成:$ssh-keygen运行上面的命令后,系统会出现一系列的提示,一路回车即可。其中一个问题是是否为私钥设置密码。如果担心私钥的安全性,可以在这里设置一个。运行后,在~/.ssh/目录下,会生成两个新文件:id_rsa.pub和id_rsa。前者是公钥,后者是私钥。此时输入以下命令将公钥传给远程主机host:$ssh-copy-iduser@host远程主机登录后将用户的公钥保存在用户家目录的~/.ssh/authorized_keys中在文件中。这样以后登录远程主机就不需要输入密码了。如果还是不行,用vim打开远程主机的/etc/ssh/sshd_config文件,去掉下面几行的注释。RSAAuthenticationyes  PubkeyAuthenticationyes  AuthorizedKeysFile.ssh/authorized_keys然后,重启远程主机的ssh服务。redhat6systemservicesshrestartRedhat7systemsystemctlrestartsshdubuntusystemservicesshrestartdebiansystem/etc/init.d/sshrestart实战生成秘钥[root@Jaking~]#ifconfigens33:flags=4163mtu1500inet192.168.10.88netmask255.255.255.0广播192.168.10.255inet6fe80::1026:b2d7:b2bc:82beprefixlen64scopeid0x20ether00:0c:29:57:18:93txqueuelen1000(以太网)RX数据包993461字节114570794(109.2roMirBpped)TX0帧packets66404bytes45385043(43.2MiB)TXerrors0dropped0overruns0carrier0collisions0lo:flags=73mtu65536inet127.0.0.1netmask255.0.0.0inet61::28Jprefix1~]#ssh-keygen#Herealwayspress输入生成公共/私人rsa密钥对。输入保存密钥的文件(/root/.ssh/id_rsa):输入密码(没有密码为空):再次输入相同的密码:您的身份已保存在/root/.ssh/id_rsa。你的公钥已经保存在/root/.ssh/id_rsa.pub中。密钥指纹为:89:86:42:59:1f:27:f1:f4:26:e8:10:bb:ae:37:e2:69root@Jaking.localdomainkey的randomart图片为:+--[RSA2048]----+|o+.o||○+乙。||哦哦哦哦||.=。+||.o+S||哦。||.||Eoo|o+o.[root@Jaking~]#cat/root/.ssh/id_rsa-----BEGINRSAPRIVATEKEY-----MIIEogIBAAKCAQEAuc8KoCp+dmHY99gOAt9ywPXv1YZyzdOKuDSaYZOMEp9c78sUJDZl08LEQCSgiNKaUYZxd5XGMHkk2n9dDWKmH5NJ1KBP+Olp433A4W+BBFF71wRD2OU8ulAwNNSsWB5Q2EXcCqHDtu9zN7fZvujPMVvVqprPqw+gXpskjRI2lG34iftflRJoChXSrEOJQEMwYJcps45xoy/7yOhPidpoU3BE1ojemMecL5bQTnd56eR1zjIEpCtwNWaKm8VJfqHge/A75R60QKfv0SjsNQaddo7gqYBkj+2zbxiJY5K1WE5K4UyU7wLzjBNZW0h/EaE73wHEKoFni8ydZ8cbjJJZhwIDAQABAoIBAARGg1QUJjzLG5b4XborMhTGk/Ix2cpqp7J9Y2ADaSG0kQrjfV8n8UfiH2nqbdc4IVzm3w2FYL4Uy4hLjfSU5IWtefFujuiHVmxppFqLmkhjJ5pW+siu3arb1YAhtKWCbRHM6bdE6Z/3+oq5rET8TmgwWMZIMacaAPKsVzb3yFG5/AU4HS4V4XgmfoqEnjwrYUnySOcZKkYvoEPelJchN44SjrKd2MndtXRgm0GbSCbwrMj3Blmx8qutnaqzMZVIgicxu2tim6mTCWru5SaydYQbDA3CX909qkvx4IVTYy2+6K1jfLy+ikhv3kJnivD0TAlEmJe4cR3G7zpVkKdz1yECgYEA5Y971v7zz+GBeAhF9H2y7iUY9V3mSdWbwS2sCDXVpzwrjCYE9QGahbE6k5NyrUmK1GxhtWJbHUjDQMS8fvDIARJ23W3T/Y3sa6XBjN6Hq5DRyicy+0tJdxynEpqzFdkYt77bpcEKXhoAakpDrfrR182Wd4rk80UHdp1XlZcLIMsCgYEAzzWNYt2UJQ4aWRxTA0+H3NRZuzrSs8vl+i7Iw02ZsDxB39/0vCSsL0OczwdR6XK2tMvG61Czve/8A9g/ERgFbWIGKqs777T9jgVS/JslRle4/JGCGeKZcw0msKOKqCHTYYOERAVZ2jPqaZZ8Gamc+TE6F5qupXhU8EB0csXpPrUCgYA5NeoqKb3/p/bJQF6W0SDfwvUWaYF0Ez1PBp/iJ/CITjGYKv1/RhgJi6LKlqu0zihASoaLWujUQocOxDkp9b4SrlRbWPzFKzKpnVTAU9FCC8SM+fn1sMytV8G3nEBXiJRlbrZ098gqrZY+5yU43dKgUsdWIZJvolt6zzm9uTf3wwKBgGQo77oNf3HV+lh+v4XHKNZO8zz0tyrf8b/YY4U8eoDc777G4+caFv0VwrO0Rx0ALV8BbZsLvIagfYJiQkICCYWRL4fqk6NQKow++JlQaVkySCIWN/xJM4GQptYVh420JBhr2UCEEaXPGI2Hh19kRJOT/w+v3qHvo6cqkN912URNAoGAGzMTIjaYBHVzdQAZT0Tb01xRXhV9BxH9WM8KPN2WH1pqxkMQ0DG0hnk9hnC7Lv8W0kRUkDb56D+wxAyLe4GO4Zy51IGnAWGWivHmVxh6Q9ToggOiqsAGTGA/HTGTElG7tOsXNIGu/eImgPeSKbAZ+Zi9HYNWx4SY/7OYnuwfXAM=-----结束RSA私钥-----[root@Jaking~]#cd/root/.ssh[root@Jaking.ssh]#lsid_rsaid_rsa.pubknown_hosts[root@Jaking.ssh]#catid_rsa.pubssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABAQC5zwqgKn52Ydj32A4C33LA9e/VhnLN04q4NJphk4wSn1zvyxQkNmXTwsRAJKCI0ppRhnF3lcYweSTaf10NYqYfk0nUoE/46WnjfcDhb4EEUXvXBEPY5Ty6UDA01KxYHlDYRdwKocO273M3t9m+6M8xW9Wqms+rD6BemySNEjaUbfiJ+1+VEmgKFdKsQ4lAQzBglymzjnGjL/vI6E+J2mhTcETWiN6Yx5wvltBOd3np5HXOMgSkK3A1ZoqbxUl+oeB78DvlHrRAp+/RKOw1Bp12juCpgGSP7bNvGIljkrVYTkrhTJTvAvOME1lbSH8RoTvfAcQqgWeLzJ1nxxuMklmHroot@Jaking.localdomain[root@Jaking.ssh]#[root@Jaking.ssh]#[root@Jaking.ssh]#[root@Jaking.ssh]#ssh-copy-idroot@192.168.10.10/usr/bin/ssh-copy-id:INFO:tryingtologin使用新密钥,过滤掉任何已经安装的/usr/bin/ssh-copy-id:INFO:1key(s)remaintobeinstalled--如果你现在被提示,那就是安装新钥匙ot@192.168.10.10的密码:添加的密钥数:1现在尝试登录机器,使用:“ssh'root@192.168.10.10'”并检查以确保只有您的密钥想要的被添加。验证免密码登录[root@Jaking.ssh]#sshroot@192.168.10.10上次登录:2019年11月20日星期三15:18:11来自192.168.10.88[root@Jaking~]#ifconfigens32:flags=4163mtu1500inet192.168.10.10网络掩码255.255.255.0广播192.168.10.255inet6fe80::20c:29ff:fe84:eae5prefixlen64scopeid0x20ether00:0c:29:84:ea:e5txqueuelen1000(以太网)RX数据包1610709字节(161.09字节)MiB)RX错误0丢弃0溢出0帧0TX数据包13043字节17924190(17.0MiB)TX错误0丢弃0溢出0载波0冲突0lo:flags=73mtu65535inet127.0.0.0::21prefixlen128scopeid0x106.SSH端口转发SSH端口转发分为三种:动态端口转发、本地端口转发和远程端口转发。假设有三台主机,host1,host2,host3。动态端口转发就是找到一个代理端口,然后通过代理端口连接到对应的端口。动态端口转发的好处是可以通过代理端口找到很多需要连接的端口,提高工作效率。例如,host1无法连接到host2,但host3可以连接到host2。Host1可以找到host3作为代理,然后使用host3连接到host2的对应端口。本地端口转发也是找第三方,然后通过第三方连接到想要的端口。但是这种方式的端口转发是固定的,点对点的。例如,假设host1是本地主机,host2是远程主机。由于各种原因,两台主机之间没有通信。但是还有一个host3,可以同时连接host1和host2。通过host3将host1连接到host2。host1找到host3,host1和host3之间有一条数据传输路径,通常称为“SSH隧道”,host1可以通过它连接到host2。远程端口转发和本地端口转发是相反的。如果host1在外网,host2在内网,一般情况下,host1无法访问host2。通过远程端口转发,host2可以反过来访问host1。host2和host1之间形成一条路,host1可以通过这条路访问host2。7、SSH的基本用法SSH主要用于远程登录:假设你想以用户名user登录远程主机host,只需要一个简单的命令。$sshuser@host如果本地用户名和远程用户名相同,登录时用户名可以省略。$sshhostSSH默认端口是22,也就是说你的登录请求会是发送到远程主机的22端口。可以使用p参数修改端口。$ssh-p2018user@host以上命令表示ssh直接连接到远程主机的2018端口。综上所述,以上就是SSH的原理和应用。希望大家能够很好的理解,给实际工作带来帮助。