免密

下框中在管理机上运行:

[root@master ~]# ssh-keygen -t rsa  #它在/root/.ssh下生成id_rsa和id_rsa.pub两个文件
[root@master ~]# ssh-copy-id root@192.168.1.128 #将公钥发给被管理端 #或者手动把生成的秘钥存放到要远程的机器的/root/.ssh/目录下权限必须设置为600
[root@master ~]# ssh root@192.168.1.128
[root@master ~]# ssh-agent bash #私钥交给ssh-agent保管
[root@master ~]# ssh-add ~/.ssh/id_rsa #向ssh-agent添加公钥身份验证
$ssh-keygen  -t rsa -P '' -f /root/.ssh/id_rsa
#-t 指定rsa 加密算法
#-P 指定密码,次数为空
#-f 指定key文件路径

ssh -i ~/.ssh/id_rsa_test2 root@10.1.0.3    #指定对应私钥文件连接远程用户

 
启动ssh-agent
如下两种方式均可启动ssh-gent
方式一:创建子shell,在子shell中运行ssh-agent进程,退出子shell自动结束代理。
ssh-agent $SHELL 方式二:单独启动一个代理进程,退出当前shell时最好使用ssh-agent -k关闭对应代理
eval `ssh-agent` 关闭ssh-agent
ssh-agent -k 将私钥添加到ssh代理
ssh-add ~/.ssh/key_name 查看代理中的私钥
ssh-add -l 查看代理中的私钥对应的公钥
ssh-add -L 移除指定的私钥
ssh-add -d /path/of/key/key_name 移除代理中的所有私钥
ssh-add -D 锁定ssh代理
锁定时需要指定锁定密码,锁定后的ssh代理暂时不能帮助我们管理私钥
ssh-add -x 解锁ssh代理
解锁时需要输入创建锁时设定的密码,解锁后ssh代理可正常工作
ssh-add -X

  

5 使用ssh-agent

ssh-agent

ssh-agent是密钥管理器

运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程

好处1:不用重复输入密码
如果私钥有密码的话,照例会被要求输入一次密码,在这之后ssh-agent可直接使用该私钥,无需再次密码认证。

好处2:不用到处部署私钥
假设私钥分别可以登录同一内网的主机 A 和主机 B,出于一些原因,不能直接登录 B。可以通过在 A 上部署私钥或者设置 Forwarding(转发) 登录 B,也可以转发认证代理连接在 A 上面使用ssh-agent私钥登录 B;可以在A上直接sftp传文件到B上。

如这边有一台机器是local,能通过公钥直接登陆server1和server2。server1和server2之间无公钥登陆。

现在要在server1上直接登陆server2,在local上执行

$ssh-agent bash
$ssh-add ~/.ssh/id_rsa

执行了之后就将私钥给ssh-agent保管了,server1上面登陆server2的时候,需要私钥验证的时候直接找ssh-agent要就可以了
接下来登陆server1,注意-A

ssh -A server1

可以发现server1上多了/tmp/ssh-xxxxxxxxx/agent.xxxxx的socket,之后神奇的事发生了,在 server1上可直接进server2,只需执行如下命令,如果加了-A则可以继续ssh forwarding(转发) ,以至无限的机器forwarding。
ssh (-A) server2
同样的原理可以试一下sftp, scp等基于ssh的命令。

如运行ssh-add,遇到Could not open a connection to your authentication agent.。

解决:需要ssh-agent启动bash,或者说把bash挂到ssh-agent下面。

$ssh-agent bash --login -i

SSH的高级应用
使用远程主机不中断的跑程序

当我们利用ssh在远程主机上跑程序的时候,只要关闭了终端就会中断ssh连接,然后远程主机上正在跑的程序或者服务就会自动停止运行。我们可以利用 nohup + 需要运行的程序 使运行的程序在切断ssh连接的时候仍然能够继续在远程主机中运行。nohup即no hang up(不挂起)。

除此之外还有很多远程操作应用,包括 数据传输、端口操作(将不加密的网络连接绑定到ssh端口实现间接加密) 等等,可以参考柚子皮大神的博客:https://blog.csdn.net/pipisorry/article/details/52269785
-------------------

原理介绍:

SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH 协议可以有效防止远程管理过程中的信息泄露问题。

从客户端来看,SSH提供两种级别的安全验证:

1、基于口令的验证

只要知道帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但缺点是:不能保证你正在连接的服务器就是你想连接的服务器。以下是我画了的登录验证流程:

当第一次链接远程主机时,会提示您当前主机的”公钥指纹”,询问您是否继续,如果选择继续后就可以输入密码进行登录了,当远程的主机接受以后,该台服务器的公钥就会保存到~/.ssh/known_hosts文件中。

2、基于密钥的验证

    这种验证的前提是客户端需要生成一对密钥,将公钥放到需访问的远程服务器。这种验证比上一种的好处是,不能仿冒真正的服务器,因为要仿冒必须拿到客户端生成的公钥。缺点就是验证等待过程稍长些。

如何生成密钥:

1、在客户端打开终端,执行ssh-keygen,该命令会默认在~/.ssh/目录下创建id_rsa、id_rsa.pub两个文件,分别为您的公钥和私钥。

2、将公钥id_rsa.pub文件拷贝到服务器端的~/.ssh/authorized_keys文件中,有三种方法:

  • 通过scp拷贝:

    •  例:scp -P 22 ~/.ssh/id_rsa.pub user@host:~/authorized_keys     #可选参数-P代表指定用端口号22
  • 通过ssh-copyid程序:
    •  例:ssh-copy-id user@host  #此种方式简单,不需追加改文件名,但不能指定端口号,默认以22端口
  • 通过cat方法:
    •  例:cat ~/.ssh/id_rsa.pub | ssh -p 22 user@host ‘cat >> ~/.ssh/authorized_keys’

----------------------------------------------------------------------------------------------------

免密码登录原理

 
图解,server A免登录到server B: 
1.在A上生成公钥私钥。 
2.将公钥拷贝给server B,要重命名成authorized_keys(从英文名就知道含义了) 
3.Server A向Server B发送一个连接请求。 
4.Server B得到Server A的信息后,在authorized_key中查找,如果有相应的用户名和IP,则随机生成一个字符串,并用Server A的公钥加密,发送给Server A。 
5.Server A得到Server B发来的消息后,使用私钥进行解密,然后将解密后的字符串发送给Server B。Server B进行和生成的对比,如果一致,则允许免登录。 
总之:A要免密码登录到B,B首先要拥有A的公钥,然后B要做一次加密验证。对于非对称加密,公钥加密的密文不能公钥解开,只能私钥解开。



ssh 配置无密码登录的更多相关文章

  1. ssh配置无密码登录

    1.在master机器上生成公钥: [root@master ~]# ssh-keygen -t rsa    注:一直按enter键就可以生成了 Generating public/private ...

  2. 安装gitolite,并ssh公钥无密码登录

    安装gitolite,并ssh公钥无密码登录 gitolite是管理git版本库的一种方案,它将git版本库的管理信息放在了一个特殊git版本库里.gitolite与linux操作系统集成了,需要使用 ...

  3. linux ssh scp无密码登录

    一. 应用场景 假如你Linux Client是客户端, Server为服务器,用户名为user.现在要配置从Client到Server的无密码SSH登录或者无密码的scp拷贝. 例如客户端Clien ...

  4. ssh设置无密码登录

    设置无密码登录此处设为有主机a登录到主机b 1.在主机a生成公钥 ssh-keygen -t rsa  之后有导航(其实一直回车就可以) 2.此时在主机a/home/YOURHOSTNAME/.ssh ...

  5. 解决root用户ssh配置无密码登陆/hadoop用户照仿可以实现相同功能:hadoop用户登录并且把命令的所有root换成home/hadoop

    http://inuyasha1027.blog.51cto.com/4003695/1132896/ 主机ip:192.168.163.100(hostname: node0) ssh无密码登陆的远 ...

  6. CentOS SSH安全和配置无密码登录

    CentOS ssh默认监听端口 22端口,允许root用户ssh登录.server投入生产后很有必要更改默认ssh监听端口和禁止root登录. 步骤1:确认安装有ssh包 [appuser@su17 ...

  7. ssh 配置自动登录

    假定 机器A 连接至 机器B . 1. 在机器A上,生成RSA秘钥对 ssh-keygen -t rsa 期间passphrase不输入密码.默认生成文件至 ~/.ssh/ -rw------- we ...

  8. ssh的无密码登录

    实现步骤如下: 1 生成一对公钥和私钥 $ ssh-keygen #以上命令等价于 ssh-keygen -t rsa #-t:指定密钥的类型,默认为SSH-2 的rsa类型; 运行上面的命令后,系统 ...

  9. SSH实现无密码登录

    1.生成秘钥 : ssh-keygen -t rsa # -t 指定生成秘钥方式,生成秘钥过程需要三次回车 2.将生成的公钥传给 ssh 的对端 ssh-copy-id root@192.168.3. ...

随机推荐

  1. DAY11-MYSQL单表查询

    一 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键 ...

  2. python pdb 基础调试

    当手边没有IDE,面对着python调试犯愁时,你就可以参考下本文:(pdb 命令调试) 参考:http://docs.python.org/library/pdb.html 和 (pdb)help ...

  3. go语言linux下安装

    1.从http://golang.org/dl/下载最新版本的GO语言二进制档案包. 注意:根据操作系统和计算架构正确选择档案包 2.使用tar命令将档案包解压到/usr/local目录中.具体方法如 ...

  4. UIActionSheet(操作列表)

    #import "AppDelegate.h" @interface AppDelegate ()<UIActionSheetDelegate> @end @imple ...

  5. 关于MySQL隐式转换

    一.如果表定义的是varchar字段,传入的是数字,则会发生隐式转换. 1.表DDL 2.传int的sql 3.传字符串的sql 仔细看下表结构,rid的字段类型: 而用户传入的是int,这里会有一个 ...

  6. java8的十大新特性

    推荐学习的博客: http://blog.csdn.net/renfufei/article/details/24600507/-------讲解的非常通俗易懂 http://blog.csdn.ne ...

  7. Spark的广播变量模块

    有人问我,如果让我设计广播变量该怎么设计,我想了想说,为啥不用zookeeper呢? 对啊,为啥不用zookeeper,也许spark的最初设计哲学就是尽量不使用别的组件,他有自己分布式内存文件系统, ...

  8. 数据结构 Job

    问题描述 有 n 项工作在等待队列中等待处理,编号为 1-n. 每个工作有个优先级 p.处理机同一时间只能处理一项工作.处理机决定接下来处理哪一项工作的方式为:从队首取出一项工作 x,若等待队列中没有 ...

  9. C++面试笔记--STL模板与容器

    1.C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作.vec ...

  10. java的import关键字的使用

    在java中如何使用Java包中自带的类呢? 方法一: 在使用时可以用Java.(包名).(方法名).(包中的类名): 例如:Java.util.Arrays.toString(某个要排序数组); 具 ...