开发者社区> 科技小能手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

来吧~不要互相伤害,ssh之间要互相信任

简介:
+关注继续查看

两台服务器之间scp也好,pssh也好,每一次互相传输文件或者远距离控制都要输入对方账号对应的密码,这是一个很麻烦很讨厌的事儿。这么麻烦又讨厌的事儿应该怎么避免呢?这就是ssh的信任登陆。


假设A与B是两台服务器,其中A是server,B是client。A是发起ssh请求的一方,B是接收ssh请求的一方。


在A机器上,# ssh-keygen -t dsa,这一步是生成一个ssh的共/私密匙对。回车之后,会出现如下的信息:

Generating public/private dsa key pair.

Enter file in which to save the key (/root/.ssh/id_dsa): 这一步,是选择保存密匙的目录,直接回车就行

Enter passphrase (empty for no passphrase): 这一步是询问这个信任关系是否需要密码,如果是过的硬的关系,自然不需要密码的,所以继续回车

Enter same passphrase again:对上一步进行确认,三联回车,然后就是这样,不但生成了“key指纹”还生成了一个图案。

wKioL1cPsteBsBB-AABIkcjMw6Q331.png

然后来到/root/.ssh里,就会发现多了两个文件:id_dsa 和 id_dsa.pub,其中id_dsa.pub是需要给B服务器的。这样一个钥匙一式两份,A一份B一份,两个是一对所以就这样建立了信任关系。


在B服务器输入 #scp A的ip地址:/root/.ssh/id_dsa.pub /root/.ssh,这样就把A服务器的id_dsa.pub文件拽到自己的/root/.ssh文件夹里,然后#mv id_dsa.pub authorized_keys ,如果改名叫authorized_keys2 的话,就是通过SSH2的方式连接。


现在A与B之间就建立了ssh信任关系,注意!目前这个信任关系是单向的,即A找B的root用户(文件在/root文件下)要文件,是不需要B的 root用户密码,如果B反过来找A要文件的话,还是要A的密码的。


改完之后,别忘了确认authorized_keys 的chmod 是644。


要是对方机器把authorized_keys删除掉,那么scp或者pssh的话就恢复要密码的环节了。linux历史连接信息在/var/log/secure中。


ssh采用公钥要比使用密码登录安全许多倍!!!所以这种方法要大力推广!!!


无法建立信任关系时排错步骤

1.AB主机名是默认的Localhost,如果AB之间的主机名相同,可能会导致无法成功。要修改主机名用hostname 命令,修改/etc/sysconfig/network,then restart your server.

2.查看SSH配置文件/etc/ssh/ssh_config,找到IdentityFile所指定的文件是什么,有的不是默认的id_rsa,这里指定的文件要和第一部分生成的文件名要相同,这里是id_rsa.

请检查/etc/ssh/sshd_config 里面是否设置Allowusers了。

3.查看B机authorized-keys的文件权限是否为600或者644 (linux文件权限详解),如直接在server机器上vi或touch建立文件authorized_keys,可能会导致信任关系无法建立。

(实践证明:如果是root之间建信任,直接644就ok,如果是非root用户,644权限是不行的。必须要改成700,600好像也行)

4.查看/var/log/secure日志,里面应该有一些蛛丝马迹可以供你参考

  

ssh-copy-id 的缺憾

ssh-copy-id有一个很要命的问题,那就是缺省它仅仅支持SSH运行在22端口的情况,不过实际上出于安全的需要,我们往往都会更改服务器的SSH端口,比如说改成10022端口,这时候你运行ssh-copy-id就会报错了,直接修改ssh-copy-id脚本当然可以修正这个问题,但是那样显得太生硬了,实际上还有更好的办法:

[注: ssh-copy-id 把密钥追加到远程主机的 .ssh/authorized_key 上.]

# vi ~/.ssh/config 加上内容: Host server Hostname ip Port 10022 你也可以单独只加入Port一行配置,那样就是一个全局配置,保存后再运行ssh-copy-id命令就不会报错了。 


补充:经网友提示,如果端口不是22,不修改config文件,按如下方式也可以: ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 10022 user@server"

附:

# ssh-keygen

# cat ~/.ssh/id_rsa.pub | ssh user@server "cat - >> ~/.ssh/authorized_keys"


参考资料:http://www.dongwm.com/archives/%E5%85%B3%E4%BA%8Essh%E5%91%BD%E4%BB%A4%E7%A0%94%E7%A9%B6%E4%BB%A5%E5%8F%8Assh%E4%BF%A1%E4%BB%BB%E8%AF%A6%E8%A7%A3/


 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1763978


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
别让你的服务器(vps)沦为肉鸡(ssh暴力破解),密钥验证、双向因子登录值得拥有
如果你购买了阿里云、腾讯云或者华为云等国内云服务上的服务器,默认登录都是以密码的方式,这就给潜在的渗透带来了机会,因为当你的linux服务器暴露在外网当中时,服务器就极有可能会遭到互联网上的扫描软件进行扫描,然后试图连接ssh端口进行暴力破解(穷举扫描),如果你不采取相对应的措施,迟早有一天服务器会被渗透者攻陷,这也就解释了为什么google cloud(谷歌云)和aws(亚马逊云)默认都是以秘钥的方式登录服务器。
0 0
ssh两台机器配置互相信任关系
今天来讲ssh两台机器配置互相信任关系
0 0
配置多台机器SSH相互通信信任
1.5台机器执行 ssh-keygen [root@sht-sgmhadoopnn-01 ~]# ssh-keygen Generating public/private rsa key pair.
1439 0
设置SSH信任
http://hi.baidu.com/jjony/item/c87475231961d53295f62b43 设置ssh信任登陆 1. 设置无需密码的ssh登陆,方法如下:假设A,B两服务器,现在需要在A机上用root登陆B机,而不需要输入密码,那我们可按照下面的步骤来做:1)在A机上生成钥匙...
401 0
及時封鎖想要用 "暴力法" 入侵伺服器的使用者(SSH)
http://phorum.study-area.org/index.php/topic,30083.html 我一直在找一支程式,這個程式的功能,就是可以及時把使用 "暴力法" 入侵伺服器的人給封鎖掉。
538 0
SSH相互认证的问题
最近别人遇到一个ssh相互认证的问题,就是每次执行ssh remote_ip date,都要输入password。没有办法我只好从头开始还是不行。删除原来建立的文件,按照如下脚本重新建立相互认证http://lfree.itpub.net/post/4950/366227 发现还是不行,有一边可以通过认证,另外一边无论如何测试就是要输入口令。
394 0
快速建立ssh相互认证
建立oracle的rac经常要建立ssh相互认证,每次都是使用copy 和 paste来建立,很容易错误,自己写了一个简单的脚本,很容易完成这个工作,如下: mkdir -p ~/.
401 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
从身份开始的零信任基础
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载