ssh免秘钥登录

简介

SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UXLinuxAIXSolarisDigital UNIXIrix,以及其他平台,都可运行SSH。

 

最基本的用法

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:
SHA256:Qn8BNpM9ZpcRUgV7ewxn0GTOoZvfn5CcqQz7Dt7xqlA 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.. ..|
+----[SHA256]-----+
[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 -c1 &>/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

 常见报错,

ERROR: @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @

 

 解决方法

ssh-keygen -R 服务器端的ip地址

 

posted @   西门运维  阅读(3529)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示