SSH免密登录

1.简介

SSH是一种网络协议,用于计算机之间的加密登录.

本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。

2.初始化公钥私钥

有rsa,dsa两种加密方式,生成的公钥私钥都存放在当前用户的ssh目录下(即~/.ssh/)

rsa

ssh-keygen -t rsa

3.~/.ssh目录解析

3.1 id_rsa

私钥

-----BEGIN RSA PRIVATE KEY-----

MIIEowIBAAKCAQEAwFBsjOKcmz8Hhz7ig+6XZjIakDgqoo4l3U0BIJQjvLRrIBrP

c3NYeqkn5MQ1oQjvzdOgx3exzIs3cCD2cBcYMg4zlHLfrT90g9TV8TA7KvI74YSp

zTqIJaADMpQ/gG9HMg+zFWGj+rd4Jhc1gx8COs7Um+9vxDAmA473++97NnV/MAvq

QQkjWr7Pb9u3r+vfV4F1RkWa8QzJAo3rquCmUVvlge2GhV5PWJr0vTbotdU0hZt5

KjzaYGjIMAmgk6StJPUu+bUhe2fqPj2LDUpf8OqjIeEuRHO1cYlajQoXxbr90GHu

iS/JzUGaLfQmx4wy7HLN+EsE5wAO75vDyy9VqwIDAQABAoIBAGpBhVhqNMEKGCy/

sAPZJcmPUWHxxoy+IWmejErlzsEKpk28wnY1euN65tHdHwx0lZqRnTnYhmJPYTgQ

3licSgAOHK2esrtUXhog1HxIe8iEwlUeKXt9JZA0Us/1XQincxzT08yygBmcmUPi

euyRi3fWo13s80HgoIBC0/1dGiTB3GW522L1ipS0U2BtP722VWpCNXjWwq4CaBru

YGazVQu6Icv2nTn5ms++odcIojdLCkPymqqJxyMNpSBQV4VwED5eUOLzeJ4r3Lzs

+ExelibTMSmTQOl9FGU+ST0C4MYisr/r7ZOMeK5QLqT/0IfZQUFMjqASYV9ghLTw

5+FU1oECgYEA8yyxY9uFVyw9KwtPefnNEP0Apb9s6W1pQz5ivnJC6SN1inijcLFP

4I5cH1zhrtO6A8ZN6ndHtPFyjeBgucjV26OafiWsPGwG1T2Se6fzF5TDWdbm7Sxv

EsAGExbWRy9er/no2PeCaXMhkykQAzH+2yHO8rmZ39b7S0eZzympliECgYEAynUF

bJXzdl2n8jZraEsjdtanGlxpVQyL0tGDXvUHtDiqfcbmgTrKM/WLlkJEuvcmwoVh

ZCFfJ3a0csy6wt1ctoJsx9348rxY5yCyYDkpgjW2T1M7cvzbEMTdg/wa3BNm6q9/

wwLEPRw6t2sMLAOL8w5e6V21G5rUR00T5KMhGksCgYBuc0NTLtcepBpYXbfImDyb

Vb8giZTnZWmlQEXLaMyZZiCyN19NBUxZm2+eUyqypLpdkom7UFhCiFRWuq5UVDNG

osW+PFBB1XM5EdFh1wPkFw6v1Jto6IC+zHc13m6PQKXKWkF3otwaF1ANrl32hZPT

ZkTAHKsWb2gOZkQnQy4i4QKBgCC3vpOou/qR8hUrhDoLgoSu9bxF2OPcri/4mdFb

qc4PJkZDQXb66DhzYwZ6WR8Z19KxuWZ0GiuHfGvc+AWLvnLkKu41ygh4NanMV+dC

9ZlMUtUI71+Ky2AvYFj3AeQ04nnkuLHsHYh+qmJ/0yy9uf0igmYWNbFrWQjYxPE7

B5t3AoGBALgt3IvOYXWwFcH3QHWK//a6YtA5ViCPaNcaCQYUSF5ZdwUIDrudTzU/

/LNy2TA58LwoWD5C0ydVnfoxV251V1WPbMEI8U0uUPZa3huLHS7RURSnNvSpCC6Y

NeV41WisQBmKk+R41yVmmLDOwseZKtYjOtSYB5g30C7a19/nhx7Q

-----END RSA PRIVATE KEY-----

3.2 id_rsa.pub

公钥: 可用于gitlab, github的ssh clone

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAUGyM4pybPweHPuKD7pdmMhqQOCqijiXdTQEglCO8tGsgGs9zc1h6qSfkxDWhCO/N06DHd7HMizdwIPZwFxgyDjOUct+tP3SD1NXxMDsq8jvhhKnNOogloAMylD+Ab0cyD7MVYaP6t3gmFzWDHwI6ztSb72/EMCYDjvf773s2dX8wC+pBCSNavs9v27ev699XgXVGRZrxDMkCjeuq4KZRW+WB7YaFXk9YmvS9Nui11TSFm3kqPNpgaMgwCaCTpK0k9S75tSF7Z+o+PYsNSl/w6qMh4S5Ec7VxiVqNChfFuv3QYe6JL8nNQZot9CbHjDLscs34SwTnAA7vm8PLL1Wr linxiaojun@linxiaojun-XPS-13-9350

3.3 authorized_keys

存储其它服务器(包括自身)的公钥,用于免密登录

ssh-copy-id user@ip 就是把id_rsa.pub拷贝到这个文件

3.4 known_hosts

存放被信任的主机

4.案例

假设本机ip为192.168.100.101, 用户为test101, 密码为123

目标主机ip为192.168.100.102, 用户为test102, 密码为123

# 分别在101, 102生成公钥私钥

# 101
ssh-keygen -t rsa
输入3次回车,即采用默认配置 ssh
# 102
ssh-keygen -t rsa
输入3次回车,即采用默认配置
# 将id_rsa.pub拷贝到101
ssh-copy-id test101@192.168.100.101 # 回到101,将id_rsa.pub拷贝到102
ssh-copy-id test102@192.168.100.102 # 接下来可以在101,102之间进行免密登录

5.一键自动化实现

5.1 expect浅析

expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。

expect是不断发展的,随着时间的流逝,其功能越来越强大,已经成为系统管理员的的一个强大助手。

expect需要Tcl编程语言的支持,要在系统上运行expect必须首先安装Tcl

5.2 expect安装

wget http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz/download
tar xzvf expect5.45.tar.gz cd expect5.45
./configure --prefix=/usr/expect --with-tcl=/usr/tcl/lib --with-tclinclude=../tcl8.4.11/generic
make
make install

5.2 实现脚本

假设目标主机ip为192.168.100.101, 用户为test, 密码为123

#!/bin/bash
set -x dst_ip=192.168.100.101
dst_user=test
dst_passwd=123 expect -c "set timeout 30;
spawn ssh $dst_user@$dst_ip;
expect {
\"*(yes/no)?*\" { send \"yes\r\";exp_continue }
\"*password:*\" { send \"$dst_passwd\r\" }
}
expect \"]*\"
send \"ssh-keygen -t rsa\r\";
expect \"*(/home/$dst_user/.ssh/id_rsa):*\";
send \"\r\";
expect {
\"*(y/n)*\" { send \"y\r\";exp_continue }
\"*(empty for no passphrase):*\" { send \"\r\" }
}
expect \"*passphrase again:*\";
send \"\r\";
expect eof
";

参考网站

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

https://blog.csdn.net/leexide/article/details/17485451

Linux入门——SSH免密登录的更多相关文章

  1. Linux 双向 SSH 免密登录

    原理 双向,顾名思义,双方互通,此处的意思是多台 linux 两两免密登录.双向比单向多了些操作,单向只需把某一个linux的公钥发送给其他linux即可,而双向要实现集群中的每一台机器都保存其他所有 ...

  2. 【Linux】ssh免密登录

    一.ssh免密配置 ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例.有机器A(192.168.1.155),B(192.168. ...

  3. linux 远程ssh免密登录

    写在前面 先说说需求: 我们平时开发.运维操作linux过程中经常需要实现将远程文件拷贝到本地或者本地文件拷贝到远程:执行远程命令等操作:这个时候建立ssh免密登录应该是一个比较好的选择: 原理 在l ...

  4. linux上ssh免密登录原理及实现

    因为我的服务器集群需要回收日志到中央进行统一处理,所以需要建立ssh互信关系实现免密登录.关于ssh的使用大家可能都很熟悉了,我们今天主要来讲下ssh连接和免密登录的原理. scp 传输文件 scp( ...

  5. linux服务器ssh免密登录

    环境:两台服务器,Park01.Park02,配置ssh免密登录 在Park01执行:ssh-keygen 然后一直回车 生成节点的公钥和私钥,生成的文件会自动放在/root/.ssh目录下   然后 ...

  6. Linux的SSH免密登录认证过程研究

    一.先看下SSH免密登录使用到的工具和生成的文件 工具:ssh-keygen用于生成秘钥文件,其中秘钥分为公钥和私钥.ssh-copy-id用于复制公钥文件到被控制机. 文件:ssh-keygen生成 ...

  7. Linux机器间ssh免密登录

    前言 一台Linux机器通过ssh的方式连接别的机器或通过scp的方式传输文件,都需要输入密码. 为了解决每次输入密码的困扰,可采用添加密钥的方式实现. 实现过程 源服务器A,目标服务器B. 1.在源 ...

  8. Linux的SSH免密登录(一)

    1.从cp/scp命令出发 scp(secure copy)是linux系统下基于ssh登录进行安全的远程文件拷贝的命令. 1. 传递文件到远程 scp local_file remote_usern ...

  9. linux 配置ssh免密登录

    一.SSH概念(百度) SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH 是目 ...

随机推荐

  1. Log4Net使用教程

    简介 为方便跟踪程序运行情况,我们可以记录系统运行异常日志,winform和web都可以通过继承异常或者try来实现. 官方网站:http://logging.apache.org/log4net/ ...

  2. SQL Server ->> SQL Server 2016功能改进之 -- Update Statistics

    1) 以前SQL Server更新一张表/索引的间隔是固定的,创建时更新一次,到了500行时更新第二次,接下来就是呈百分比式的间隔去更新,距离数据修改量达到表的行数量的的20%再次触发更新.但是这样的 ...

  3. SQL点点滴滴_修改数据库的兼容级别

    语法 ALTER DATABASE database_name SET COMPATIBILITY_LEVEL = { 80 | 90 | 100 } 参数 database_name 要修改的数据库 ...

  4. java img图片转pdf 工具类

    package com.elitel.hljhr.comm.web.main.controller; import java.io.File; import java.io.FileNotFoundE ...

  5. VMWARE里安装时出现'SMBus Host Controller not enabled'

    在虚拟机上运行Linux内核版本为4.7或以上的系统都在安装过程中或在启动时会因为加载intel_powerclamp驱动而导致崩溃.解决办法:1.在启动Ubuntu的时候按住左Shift键:2.Ub ...

  6. Spring注解开发-全面解析常用注解使用方法之组件注册

    目录 1. @Configuration 2. @ComponentScan excludeFilters includeFilters 使用自定义TypeFilter 3. @Bean @Scope ...

  7. 【深入理解JAVA虚拟机】第一部分.走进Java

    Java技术体系 如果仅从传统意义上来看,Sun官方所定义的Java技术体系包括以下几个组成部分:Java程序设计语言各种硬件平台上的Java虚拟机Class文件格式Java API类库来自商业机构和 ...

  8. Linux 系统查看tomcat控制台命令

    前提进入tomcat/logs文件夹下 查看全部命令是:tail -f catalina.out 如果想查看具体文件的日志进入该文件所在目录然后命令如下: tail -f filename

  9. Python迭代(入门8)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6407980.html 本文出自:[Edwin博客园] Python迭代 1. 什么是迭代 注意: 集合是指包 ...

  10. websphere部署中文乱码问题

    WebSphere上面的java虚拟机存在默认编码方式,默认为ISO-8859-1. 在JAVA虚拟机的定制属性页面上,添加如下内容: 1.修改服务器编码类型: (1)前台修改方法: 服务器-> ...