SSH 认证这事儿,说白了就是那套“传话游戏”。想象一下,你手里拿着一把钥匙,想开门,但对方那扇门还挂着个牌子说“别人不能碰”。你得先跟门口保安说一声“我有钥匙”,然后把钥匙递那会儿,保安把牌子搞定来,你才能进去。SSH 认证就是专门干这个的,它让远程登录变得既保险又撇脱。 具体如何干,核心就是“公钥密码对撞”。你平时用某个系统,比如 Linux,可能一直用同一个密码,比如"123456"。但这密码忒好办猜了,黑客只要盯着你的日志,就能把你密码查出来。
这时候你就得换个思路,把那个密码,换成个“数字身份证”,也就是公钥。
这个身份证就是私钥,只有你自己有,千万别告诉别人,就像你家门锁上的那种小钢珠,丢了就找不回来。 你找个地址本,把那个私钥存好,然后找个服务器,在命令行里输入命令。服务器会问你:“你认哪个公钥?”你得回答:“我认这个”,然后把这个公钥 ID 丢给它。服务器收到这个公钥后,不会直接给你开门,而是跑去查你的“数字身份证”——也就是你私钥里存的那串哈希值。
要是查出来的哈希值跟刚刚你丢给它的那个公钥 ID 对得上,服务器就放行,说:“真家伙,你是你,别人不是。”要是不对,直接回绝。
这就叫非对称加密,用那个公钥去验证私钥,私钥反过来验证公钥。 大量人第一次用总认定这流程繁琐,实际上不然。
那会儿你得登录进去再打命令,目前只需输入那一串“身份 ID"就能搞定。
比如你登录 SSH,直接敲一行命令,系统会问你“Which user's public key to use?",你回答"demo",它立马就去查那个 demo 的公钥 ID,要是匹配上了,直接给你开,整个过程不到两秒。 实际干活中,最头疼的就是那个“密码”局部。SSH 默认是用密码来解锁的,这和那个“数字身份证”没有半毛钱关系。你要想改那个默认密码,就得先去编辑 SSH 配置文件,把那个"123456"改成你自己的密码。但切记,改完密码还得重新生成那个公钥,不然之前的密码就全废了,相当于把那张“数字身份证”给扔了。 要生成新的公钥,你得先在一个有权限的系统上运行一个脚本,比如那个标准的 `ssh-keygen`。
这个脚本是个小工具,它会自动在当前的用户目录下生成两样东西:一个是私钥文件 `.ssh/id_rsa`,一个是公钥文件 `.ssh/id_rsa.pub`。生成完之后,你会看到一堆乱七八糟的字符,这实际上是那个“数字身份证”的指纹,千万别碰,这是为了防止别人用私钥生成假的公钥来冒充你。 收到公钥后,你得把所有文件拷到服务器的对应文件夹里。别看 SSH 赞成多种传输方式,比如用 SCP 要么 SFTP 传文件,但最保险的还是直接复制粘贴,要么用 scp 命令把文件拖那会儿。复制完公钥文件后,别忘了把整个 `.ssh` 文件夹也拷那会儿,不然只复制了公钥却没复制文件夹,服务器可能当作你还没预备好,要么当作你根本没放在这。 自然,这一步还得反复确认。服务器启动后,它不会立马给你开门,而是会去查你刚刚发给它的公钥 ID。
要是你发给它的 ID 和私钥里存的 ID 对不上,它直接回绝你,提示“Public key does not match”,这时候就得重新生成密钥对了。
这时候你会收到一条信息,告诉你“Your public key has been sent to the following keys:...",这实际上是在告诉你,你的公钥已经发出去了,不需求再重复发送了。 有时候还会遇到“密钥冲突”的情况。
比如你换了个新的电脑,要么换了个新的私钥,重新生成的 ID 和之前那个旧的 ID 一模一样。
这时候服务器会困惑:“这个 ID 既出目前我刚刚的列表中,又出目前新传来的列表中,到底是旧 ID 还是新 ID 有效?”这得看具体如何配置。
一般处理方式挺好办:你只需求把那个旧 ID 删掉,让新 ID 生效就行。
要么反过来,要是旧 ID 还在,你能够把旧 ID 也删掉,让新 ID 独占。 还有个细节要注意,就是那个“密码”务必和密码文件里的内容彻底一致。
要是你把密码文件改成大写的"PASSWD",但实际存的是小写的,SSH 认证会直接报警,告诉你“Auth rejection: incorrect password"。
这可不是开玩笑的,一旦密码不对,连那把“数字身份证”就失效了,你得重新生成密钥对,否则你就一辈子进不去那个服务器了。 最终总结一下,SSH 认证流程就是如此环环相扣:先生成长期密钥对,把私钥和公钥分开保管,然后把公钥发给服务器,最终用密码去验证那个“数字身份证”。
只要这三步走稳,远程登录就能变成一种日常操作。
只要能记住那个私钥的密码,密码文件里的字母大小写不能搞错,再配合上那把总开关——SSH 密钥对,你就再也不怕黑客盯着你的日志,直接输入那个公钥 ID 就能顺利登出,保险又高效。