必须知道这个过程:

1)远程主机收到用户的登录请求,把自己的公钥发给用户。
2)用户使用这个公钥,将登录密码加密后,发送回来。
3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

$ ssh user@host
The authenticity of host 'host (12.18.429.21)' can't be established.
RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
Are you sure you want to continue connecting (yes/no)?

这段话的意思是,无法确认远程host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?

所谓"公钥指纹",是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上例中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。

很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?回答是没有好办法,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。

假定经过风险衡量以后,用户决定接受这个远程主机的公钥。
'''
Are you sure you want to continue connecting (yes/no)? yes
'''
系统会出现一句提示,表示host主机已经得到认可
'''
Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.
'''
然后,会要求输入密码。
'''
Password: (enter password)
'''
如果密码正确,就可以登录了。

当远程主机的公钥被接受以后,它就会被保存在文件
$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。

每个SSH用户都有自己的known_hosts文件,此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。

##公钥登录即免密登录

"公钥登录":
1)用户将自己的公钥储存在远程主机上。
2)登录远程主机的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回远程主机。
3)远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。

1.ssh-keygen -t rsa
可以生成一个公钥
运行结束以后,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。
2.ssh-copy-id user@host
将公钥传送到远程主机host上面

如果还是不行,就打开远程主机的/etc/ssh/sshd_config这个文件,检查下面几行前面"#"注释是否取掉。

  RSAAuthentication yesPubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys

然后,重启远程主机的ssh服务。
远程主机将用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。

这里不使用上面的ssh-copy-id命令,改用下面的命令,解释公钥的保存过程:

  $ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

这条命令由多个语句组成,依次分解开来看:
1)"$ ssh user@host",表示登录远程主机;
2)单引号中的mkdir .ssh && cat >> .ssh/authorized_keys,表示登录后在远程shell上执行的命令:
3)"$ mkdir -p .ssh"的作用是,如果用户主目录中的.ssh目录不存在,就创建一个;
4)'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub的作用是,将本地的公钥文件~/.ssh/id_rsa.pub,重定向追加到远程文件authorized_keys的末尾。

写入authorized_keys文件后,公钥登录的设置就完成了。

可以看到上边的这个生成公钥和撕咬的过程,注意箭头哪个地方输入的文件名为你的撕咬文件的,输入撕咬会自动生成公钥,copy公钥到远程主机的authorized_keys文件即可实现,

特别注意:
注意因为sshd有严格的权限要求,所以如果还需要输入密码的话,看看.ssh文件夹和authorized_keys文件的权限。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html

转载于:https://blog.51cto.com/aklaus/2101936

Linux系统主机之间建立信任关系相关推荐

  1. Linux 两台主机之间建立信任关系方式及基本原理

    前言: 去年学过一段时间的现代密码学,最近在配置github, Linux主机之间建立信任关系的时候都用到了其中一些知识,所以刚好整理一下,想直接看操作方式的可直接拉到下面 密码学基本知识 一 现代密 ...

  2. Linux两台主机之间建立信任关系

    Linux两台主机之间建立信任关系 一般用ssh命令访问另一台机器,或者用scp命令从别的机器拷贝数据和文件,都要输入对应账户的密码.而在两台机器之间建立信任关系,则可以省略输入密码的过程. 一  : ...

  3. 两台 Linux 主机之间配置信任关系(以及如何解除)

      主机之间的 ssh 信任,简单地说,就是主机之间使用 ssh 命令登录主机不需要密码.   一.主机之间配置信任关系   将主机 A (47.100.247.242) 作为信任主机,主机 B(10 ...

  4. Linux主机之间建立信任 公钥私钥 ssh免密登录 一台主机直接控制另一台主机执行命令

    工作中有时我们需要用一台服务器去控制另一台服务器执行命令,或者将一些文件拷贝到另一台服务器上,但是这种操作指令默认是需要输入密码的,如果频繁操作的话就会很麻烦,或者如果用代码控制服务器执行命令时需要密 ...

  5. WINDOWS SERVER 2003从入门到精通之林之间的信任关系

    大家应该知道,使用WIN2003创建的AD(林)中的各个域之间的信任关系默认就是双向信任可传递的.那么如果企业的应用中如果出现了两个林或更多的林时,还要进行相互的资源访问时,我们该怎么办?因为默认只是 ...

  6. 创建Win2003域和Win2008域之间的信任关系,Active Directory系列之十八

    创建Win2003域和Win2008域之间的信任关系 我们在上一篇文章中创建了域信任关系,这个信任关系发生在两个Win2003域之间,而且两个域使用了同一个DNS服务器.今天我们更换一个实验场景,拓扑 ...

  7. 解决Error基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系

    今天写程序的时候调用到一个第三方的DLL文件,本机调试一切都正常,但是程序不是到服务器以后一直提示一个BUG:"基础连接已经关闭: 未能为SSL/TLS 安全通道建立信任关系".  ...

  8. C#运行出现:基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。

    英文:The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secu ...

  9. C#Post接口报错信息:基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系--安全证书问题 解决方法

    目录 一.说明: 二.错误信息: 三.解决方法 1.引用命名空间: 2.添加接收方法(CheckValidationResult): 3.post方法里面增加调用:CheckValidationRes ...

最新文章

  1. TCC分布式事务的实现原理
  2. 盘点提高国内访问 GitHub 的速度的 9 种方案
  3. 拷贝构造,操作符重载
  4. JFreeChart相关类中文说明
  5. linux mtu日志,linux MTU调整
  6. 95-24-030-Future-ChannelFuture
  7. 矩池云上如何修改cudnn版本
  8. win11组策略如何开启自动更新 Windows11组策略开启自动更新的设置方法
  9. .NET 类、网站dll反编译工具
  10. Docx4j简单学习
  11. Java读写gif格式图片,解决ImageIO读取gif文件只读取第一帧的问题(read and write gif format pictures in Java)
  12. CooCox工具简介——免费和开源的ARM嵌入式开发工具
  13. python中strip()函数的详解
  14. dapper 连接mysql_使用Dapper访问SQL Server数据库
  15. 英语diamaund钻石diamaund单词
  16. 内网靶场_从自做到拿下-攻击篇
  17. NC瑞士军刀 网络工具
  18. 【热门主题:麦蒂xp主题】
  19. 软件研发的6sigma案例解析(转)
  20. Centos postfix+ssl 加密连接

热门文章

  1. Tips-Windows 10【多桌面视窗】操作
  2. 善于 调用Windows API
  3. dos 命令与 C++的联合作业,有点意思~
  4. 苹果iPad视觉设计分析
  5. Linux上的WebSphere MQ开发快速入门
  6. hdu4685 最大匹配可能性
  7. 【Google Play】Android 应用用户协议 ( 生成用户协议 | HTML 用户协议模板 | Markdown 用户协议模板 )
  8. 【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编框架 | PyCharm 中导入 Capstone 反汇编框架 )
  9. 【Android 插件化】使用插件化引擎对应用进行重打包的恶意软件特征 ( 检测困难 | 成本低 | 恶意插件可更换 | 容易传播 )
  10. 【IntelliJ IDEA】导出可执行 JAR 包