ssh免秘钥登录
简介
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
SSH无密码(密钥验证)登录的配置
(方法一)配置主机A免密登录到主机B
1.在主机A生产密钥对: ssh-keygen -t rsa 会在当前登录用户的home目录下的.ssh目录下生成id_rsa和id_rsa.pub两个文件,分别代表密钥对的私钥和公钥。
2.拷贝主机A的公钥到主机B: scp /root/.ssh/id_rsa.pub root@192.168.0.1:/root
3.将主机A的公钥加到主机B的授权列表.ssh/authorized_keys(若不存在,手动创建): cat id_rsa.pub >> authorized_keys
4.授权列表authorized_keys的权限必须是600,chmod 600 authorized_keys
测试
ssh root@192.168.0.1
scp abc.txt root@192.168.0.1:/root
(方法二)#进入到我的home目录 cd ~/.ssh
ssh-keygen -t rsa (四个回车)
执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免登陆的机器上: ssh-copy-id localhost
最基本的用法
SSH主要用于远程登录。假定你要以用户名user,登录远程主机host,只要一条简单命令就可以了。
1
|
$ ssh user@host |
如果本地用户名与远程用户名一致,登录时可以省略用户名
1
|
$ ssh host |
SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。
1
|
$ ssh -p 2222 user@host |
上面这条命令表示,ssh直接连接远程主机的2222端口。
下面开始部署ssh秘钥的批量分发
第一步:安装sshpass免交互工具并进行SSH-key的批量分发
下载epel源并更新yum仓库
1
2
|
[root@controller ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel -7 .repo [root@controller ~]# yum clean all -y && yum makecache |
第二步:创建密钥对文件
免交互创建密钥对
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
[root@controller ~]# ssh-keygen -t dsa -f ~/.ssh/id_dsa -P "" Generating public/private dsa key pair. /root/.ssh/id_dsa already exists. Overwrite (y/n)? y Your identification has been saved in /root/.ssh/id_dsa. Your public key has been saved in /root/.ssh/id_dsa.pub. The key fingerprint is: SHA 256: Qn 8 BNpM 9 ZpcRUgV 7 ewxn 0 GTOoZvfn 5 CcqQz 7 Dt 7 xqlA root@controller The key's randomart image is: +---[DSA 1024 ]----+ | =o..=*o+o| | ..+=.o..=o| | . o.o..o =| | . . . .o* | | . SE. o. o| | ... . =..| | . o . * ..| | o * + . o| | ++B.. ..| +----[SHA 256 ]-----+ [root@controller ~]# ls ~/.ssh/ id_dsa id_dsa.pub 命令说明: ssh-keygen:生成密钥对命令 -t:指定密钥对的密码加密类型(rsa,dsa两种) -f:指定密钥对文件的生成路径包含文件名 -P(大写):指定密钥对的密码 |
第三步:免交户方式分发公钥
1
|
[root@controller .ssh]# sshpass -p "123" ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no root@192.168.128.165" |
命令说明:
sshpass:专为ssh连接服务的免交户工具
-p :指定登录的密码
ssh-copy-id:自动分发公钥的工具
-i:指定公钥路径
-o StrictHostKeyChecking=no :不进行对方主机信息的写入(第一次ssh连接会在know_hosts文件里记录)
交互式分发命令
1
|
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168 . 91.135 |
第四步:测试
1
2
|
[root@controller .ssh]# ssh root@ 192.168 . 128.165 Last login: Wed Jan 10 02: 32: 04 2018 from controller |
编写脚本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#!/bin/bash User=root passWord= 123 port= 2266 function YumBuild(){ echo "正在安装epel源yum仓库,请稍后..." cd /etc/yum.repos.d/ &&\ [ -d bak ] || mkdir bak [ `find ./*.* -type f | wc -l` -gt 0 ] && find ./*.* -type f | xargs -i mv {} bak/ wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel -6 .repo &>/dev/null yum -y clean all &>/dev/null yum makecache &>/dev/null } rpm -q sshpass &>/dev/null || yum -y install sshpass &>/dev/null if [ $? -gt 0 ];then YumBuild yum -y install sshpass &>/dev/null || (echo "sshpass build error!" && exit) fi [ -d ~/.ssh ] || mkdir ~/.ssh;chmod 700 ~/.ssh echo "正在创建密钥对...." rm -rf ~/.ssh/id_dsa ~/.ssh/id_dsa.pub ssh-keygen -t dsa -f ~/.ssh/id_dsa -P "" &>/dev/null for ip in `cat /root/Pingip.txt` do ping $ip -c 1 &>/dev/null if [ $? -gt 0 ];then echo "$ip无法ping通请检查网络" continue fi sshpass -p "$passWord" ssh-copy-id -i ~/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no -p2266 ${User}@$ip" &>/dev/null echo "$ip 密钥分发成功" done |