当前位置: 首页 > news >正文

SSH使用密钥免密码登录

使用ssh远程连接服务器,有两种身份校验方式:账号密码和秘钥。使用秘钥的方式理论上更加安全,而且免去了输入密码的步骤,使用起来更方便(尤其对于sftp,scp等)。

设置 SSH,打开密钥登录功能

编辑 /etc/ssh/sshd_config 文件,进行如下设置:

RSAAuthentication yes
PubkeyAuthentication yes

留意 root 用户能否通过 SSH 登录:

PermitRootLogin yes

当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录:

PasswordAuthentication no

最后,重启 SSH 服务:

[root@host .ssh]$ service sshd restart
  1. 秘钥由谁生成
    这是比较容易搞乱的一点。这里以A、B两台服务器为例,假设A需要ssh登录B,那么应该由那台服务器生成秘钥呢。可能有人以为像门锁一样,主人家负责装锁配钥匙,把钥匙交给要开门的人使用,所以由被访问的B服务器生成秘钥。

    事实恰恰相反,秘钥由访问请求方A服务器生成,并把生成的公钥交给B导入;公钥可以在多台服务器导入,一台服务器导入了A的公钥,即意味着承认A的有访问自己权限,所以A可以用一套密钥登录多台服务器。

  2. 账号
    访问和被访问的服务,需要有相同的账号,而且密钥由该账号生成。

  3. 密钥生成
    在A服务器上执行命令:
    ssh-keygen -t [rsa|dsa]
    rsa和dsa是生成密钥常用的两种加密算法,其他可选算法还有ecdsa、rsa1等。
    命令执行过程需要用户输入的地方连续回车即可(enter passphrase的别输入,否则登录的时候还是得输入密钥密码)。
    执行成功后,在用户home目录下的.ssh子目录里会生成私钥文件和公钥文件:id_rsa,id_rsa.pub或id_dsa,id_dsa.pub。

  4. 公钥导入
    方法一:
    把公钥文件id_rsa.pub上传到B服务器,然后执行:
    cat id_rsa.pub >> ~/.ssh/authorized_keys
    将id_rsa.pub的内容,追加到文件~/.ssh/authorized_keys中

    方法二:
    在A服务器上使用命令cat ~/.ssh/id_rsa.pub查看公钥内容,将内容复制追加到B服务器的文件~/.ssh/authorized_keys中(请注意不要删除或覆盖该文件中已有的内容)。

  5. 修改权限
    A服务器上的.ssh和秘钥文件的权限在ssh-keygen生成时已设好,无须特别设置。B服务器上如果是首次添加authorized_keys,需要修改权限:
    chmod 600 authorized_keys
    设置authorized_keys权限

    chmod 700 -R .ssh
    设置.ssh目录权限

  6. 登录
    在A服务器上执行:
    ssh-add /id_rsa
    必须保证id_rsa文件的权限为600
    ssh ip/hostname(B服务器的ip或主机名)
    即可登录。
  7. 问题Could not open a connection to your authentication agent
    先执行  eval `ssh-agent`  (是~键上的那个`) 再执行 ssh-add ~/.ssh/rsa成功

转载于:https://www.cnblogs.com/wangshuyi/p/6664799.html

相关文章:

  • Ajax和跨域问题
  • 使用HTML5的canvas做图片剪裁
  • java异常处理(Exception handing)机制
  • 四则运算 web 版
  • 201521123030 《Java程序设计》第7周学习总结
  • Ajax异步封装
  • 闭包与循环
  • iOS 字符串 MD5
  • 查看linux源代码的在线网站
  • Android入门:MVC模式(中)
  • Oracle中INSTR函数与SQL Server中CHARINDEX函数
  • 沟通和编程一样,也是一门艺术系列5(沟通的方向)
  • CSS实现Tab布局
  • Spring定时任务的几种实现(转)
  • Android Handler使用
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 0基础学习移动端适配
  • Apache Spark Streaming 使用实例
  • Babel配置的不完全指南
  • CSS盒模型深入
  • ES10 特性的完整指南
  • isset在php5.6-和php7.0+的一些差异
  • js算法-归并排序(merge_sort)
  • mongo索引构建
  • Mysql优化
  • SAP云平台里Global Account和Sub Account的关系
  • TypeScript迭代器
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 电商搜索引擎的架构设计和性能优化
  • 关于for循环的简单归纳
  • 猴子数据域名防封接口降低小说被封的风险
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 如何在 Tornado 中实现 Middleware
  • 深度学习入门:10门免费线上课程推荐
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 湖北分布式智能数据采集方法有哪些?
  • 如何用纯 CSS 创作一个货车 loader
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #define与typedef区别
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (2)MFC+openGL单文档框架glFrame
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)计算机毕业设计高校学生选课系统
  • (强烈推荐)移动端音视频从零到上手(上)
  • (三)docker:Dockerfile构建容器运行jar包
  • (顺序)容器的好伴侣 --- 容器适配器
  • (一)基于IDEA的JAVA基础10
  • (转)使用VMware vSphere标准交换机设置网络连接
  • .apk 成为历史!