欢迎大家关注我的公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。
一、前言
博主前些天买了一部Mac Pro,装完常用的开发软件后,立马就想连一下我的阿里云服务器。然后我就想下个XShell,然后竟然发现Mac居然没有,太不科学了,这么好的一款软件,为啥开发者没有适配相应的Mac系统。然后网上查了下,iTerm2在Mac的终端连接工具中好评较多,于是就下了iTerm2。但是博主连接的并不顺利,搞了一晚上到12点多才连接上。网上查阅了一轮,发现都没啥用,可能博主遇到的场景和它们不一样。为了后面的小伙伴们连接的时候少踩坑,我觉得是很有必要分享出来。
二、SSH下authorized_keys, id_rsa, id_rsa.pub, known_hosts作用
分享之前我们先来了解下这几个东西。
Secure Shell (SSH)
是一种加密网络协议,用于在非安全(无担保)的网络上安全地操作网络服务,常用于用户远程登录到计算机系统。RSA (Rivest-Shamir-Adleman)
是最早的公钥加密系统之一,广泛用于安全数据传输。在这种加密系统中,加密密钥是公开的,解密密钥是私密的。在RSA中,这种不对称是基于两大素数的乘积分解的实际困难,即“保理问题”。
1、known_hsots
ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。我在上面列出的情况,就是这种情况。
原因:一台主机上有多个Linux系统,会经常切换,那么这些系统使用同一ip,登录过一次后就会把ssh信息记录在本地的~/.ssh/known_hsots文件中,切换该系统后再用ssh访问这台主机就会出现冲突警告,需要手动删除修改known_hsots里面的内容。
2、authorized_keys
就是为了让两个linux机器之间使用ssh不需要用户名和密码。采用了数字签名RSA或者DSA来完成这个操作。
模型分析:
假设 A (192.168.20.59)为客户机器,B(192.168.20.60)为目标机;
要达到的目的:
A机器ssh登录B机器无需输入密码;
加密方式选 rsa|dsa均可以,默认dsa。
单向登陆的操作过程(能满足上边的目的):
- 登录A机器
ssh-keygen -t [rsa|dsa]
,将会生成密钥文件和私钥文件id_rsa,id_rsa.pub或id_dsa,id_dsa.pub
- 将 .pub 文件复制到B机器的 .ssh 目录, 并
cat id_rsa.pub >> ~/.ssh/authorized_keys
- 大功告成,从A机器登录B机器的目标账户,不再需要密码了;(直接运行 #ssh 192.168.20.60 )
双向登陆的操作过程:
- ssh-keygen做密码验证可以使在向对方机器上ssh ,scp不用使用密码.具体方法如下:
- 两个节点都执行操作:
# ssh-keygen -t rsa
- 然后全部回车,采用默认值.
- 这样生成了一对密钥,存放在用户目录的~/.ssh下。
将公钥考到对方机器的用户目录下,并将其复制到~/.ssh/authorized_keys
中(操作命令:#cat id_dsa.pub >> ~/.ssh/authorized_keys
)。
3、id_rsa、id_rsa.pub
上班的第一天,上司大哥都会说:待会给我发个公钥吧。
这里说的公钥其实就是id_rsa.pub
。
上司大哥是要把我们的客户端公钥上传到服务器,然后再把这个客户端公钥添加到authorized_keys
。添加后,服务器就会认为你这个客户端为可信任。你则可以访问这个服务器了。
如何获取id_rsa.pub
?
终端输入 ssh-keygen
一路回车,最后会看到一个矩形的图案。你这时ls
是看不到.ssh
文件夹的。
接着cd .ssh/
,这样就会切换到.ssh
,再ls
,就会看到id_rsa
和id_rsa.pub
最后 open id_rsa.pub
,就会打开这个文件夹了。
现在你可以发id_rsa.pub
给你的上司大哥了。
三、解决方法
1、先进入.ssh里看是否有以下文件
localhost:.ssh root# ls
authorized_keys id_rsa id_rsa.pub known_hosts
localhost:.ssh root#
没有的话按照我上面说的方式生成。
2、修改ssh配置文件(/etc/ssh/sshd_config)
执行 sudo vim /etc/ssh/sshd_config
你会看到一堆配置信息
怎么操作不用我说了吧?算了还是说一下,怕有些新手操作的呢。
修改操作:Shift+i
修改完后:先按键盘左上角的 Esc 键,再输入:wq!
。注意这里的冒号一定不能省!!!
HostKey /etc/ssh/ssh_host_rsa_key
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes # 禁止密码认证
PermitEmptyPasswords no # 禁止空密码登入
RSAAuthentication yes # 采用RSA认证
PubkeyAuthentication yes # 采用公钥认证
3、权限设置
如果第2步还不行的话,就进行第3步。
# chmod 700 /Users/riemann
# chmod 700 /Users/riemann/.ssh
# chmod 644 /Users/riemann/.ssh/authorized_keys //公钥文件的所有权限
# chmod 600 /Users/riemann/.ssh/id_rsa //私钥文件的所有权限
4、修改阿里云的密码并重启服务器
一般前面几种就已经可以解决了。万一还是没解决,那就修改阿里云的密码并重启服务器。
重置实例密码,然后重启阿里云云主机。
再次尝试,大功告成!!!
如果对你有帮助的话,那就点个赞不过分吧!!!熬夜写的,现在凌晨两点来了,可以去睡个美觉了,哈哈哈。