LINUX用户建立秘钥认证实现SHELL脚本管理,分发,部署

简介:

环境:

ssh server: 192.168.100.29  server.example.com

ssh client: 192.168.100.30  client.example.com


通过root用户建立秘钥认证实现SHELL脚本管理,分发,部署


首先client端创建秘钥对,并将公钥分发给需要登录的SSH服务端

注:公钥相当于锁,私钥相当于钥匙,我们这里相当于在客户端创建一对钥匙和锁,想要做到SSH免密码登录,就相当于我们将锁分发到服务端并装锁,然后客户端就可以利用钥匙开锁。


一.建立秘钥认证

1.在客户端创建秘钥对:(ssh client)

# su - root

# ssh-keygen -t dsa

一路回车即可

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

Generating public/private dsa key pair.

Enter file in which to save the key (/root/.ssh/id_dsa):

Created directory '/root/.ssh'.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

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:

e9:5e:4a:7f:79:64:c5:ae:f2:06:a7:26:e4:41:5c:0e root@zabbix.example.com

The key's randomart image is:

+--[ DSA 1024]----+

|                 |

|          E .    |

|         . +   . |

|         .o .   o|

|        S.     o |

|       .  o . + .|

|        oo.. B . |

|       o +o * +  |

|        o .+ =.  |

+-----------------+

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


2.查看生成的秘钥对:(ssh client)

# ls -lda .ssh

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

drwx------ 2 root root 4096 6月   6 23:03 .ssh

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

# cd .ssh

# ls -la

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

总用量 16

drwx------   2 root root 4096 6月   6 23:03 .

dr-xr-x---. 26 root root 4096 6月   6 23:03 ..

-rw-------   1 root root  668 6月   6 23:03 id_dsa

-rw-r--r--   1 root root  613 6月   6 23:03 id_dsa.pub

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

秘钥生成完毕


3.将公钥(锁)分发到SSH服务端:(ssh client)

# ssh-copy-id -i .ssh/id_dsa.pub 192.168.100.29

注:若非root用户,以及自定义SSH端口,则格式为:

# ssh-copy-id -i .ssh/id_rsa.pub "-p 22 user@server"

输入yes,然后密码后回车:

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

The authenticity of host '192.168.100.30 (192.168.100.30)' can't be established.

RSA key fingerprint is fc:9b:2e:38:3b:04:18:67:16:8f:dd:94:a8:bd:08:03.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.100.30' (RSA) to the list of known hosts.

Address 192.168.100.30 maps to bogon, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!

root@192.168.100.30's password:

Now try logging into the machine, with "ssh '192.168.100.30'", and check in:


 .ssh/authorized_keys


to make sure we haven't added extra keys that you weren't expecting.

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

公钥分发完毕



4.服务端查看收到的分发文件:(ssh server)


# ll /root/.ssh

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

总用量 4

-rw------- 1 root root 613 6月   6 23:29 authorized_keys

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

成功收到


5.客户端验证登陆:(ssh client)

查看服务端IP地址:

# ssh 192.168.100.29 /sbin/ifconfig eth0

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

Address 192.168.100.29 maps to bogon, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!

eth0      Link encap:Ethernet  HWaddr 00:0C:29:7A:4F:30  

         inet addr:192.168.100.29  Bcast:192.168.100.255  Mask:255.255.255.0

         inet6 addr: fe80::20c:29ff:fe7a:4f30/64 Scope:Link

         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

         RX packets:184297 errors:0 dropped:0 overruns:0 frame:0

         TX packets:162028 errors:0 dropped:0 overruns:0 carrier:0

         collisions:0 txqueuelen:1000

         RX bytes:163599380 (156.0 MiB)  TX bytes:51284830 (48.9 MiB)

         Interrupt:19 Base address:0x2000

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


注:这里遇到警告提示“Address 192.168.100.29 maps to bogon, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!”。

解决办法为修改客户端/etc/hosts文件,将服务端的ip地址与主机名对应关系写进去就可以了。


(ssh client)

# echo "192.168.100.29  server.example.com" >> /etc/hosts

重新查看

# ssh 192.168.100.29 /sbin/ifconfig eth0

无错误提示:

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

eth0      Link encap:Ethernet  HWaddr 00:0C:29:7A:4F:30  

         inet addr:192.168.100.29  Bcast:192.168.100.255  Mask:255.255.255.0

         inet6 addr: fe80::20c:29ff:fe7a:4f30/64 Scope:Link

         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

         RX packets:184530 errors:0 dropped:0 overruns:0 frame:0

         TX packets:162264 errors:0 dropped:0 overruns:0 carrier:0

         collisions:0 txqueuelen:1000

         RX bytes:163618650 (156.0 MiB)  TX bytes:51304877 (48.9 MiB)

         Interrupt:19 Base address:0x2000

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


查看服务端内存

# ssh 192.168.100.29 free -m

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

            total       used       free     shared    buffers     cached

Mem:          1006        991         14          0        177        308

-/+ buffers/cache:        506        500

Swap:         1023          6       1017

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


二.创建SHELL脚本实现批量管理:(ssh client)

1.创建脚本:

# cd /etc/rc.d

# vi manager.sh

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

for ip in `cat iplist`

do

  echo "---$ip---"

  ssh $ip $1

done

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


2.生成IP列表:(若有多台SSH服务端需要管理,这里以此类推即可)

# echo 192.168.100.29 >> iplist

# echo 192.168.100.28 >> iplist

。。。。。


# cat iplist

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

192.168.100.29

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


3.执行脚本:

# sh manager.sh "df -h"

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

---192.168.100.29---

文件系统              容量  已用  可用 已用%% 挂载点

/dev/sda3              19G  6.7G   11G  38% /

tmpfs                 504M     0  504M   0% /dev/shm

/dev/sda1             194M   27M  158M  15% /boot

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

管理成功


三.创建SHELL脚本实现批量分发:(ssh client)

1.创建脚本:

# cd /etc/rc.d

# vi distribute.sh

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

for ip in `cat iplist`

do

  echo "---$ip---"

  scp -r -p $1 $ip:$2

done

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


脚本IP列表已创建


执行脚本:

将本地/root下文件分发到SSH服务端主机

# sh distribute.sh /root /tmp

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

---192.168.100.29---

.ICEauthority                                 100%  620     0.6KB/s   00:00    

install.log.syslog                            100%   10KB  10.2KB/s   00:00    

preferred-web-browser.desktop                 100% 2378     2.3KB/s   00:00    

preferred-mail-reader.desktop                 100%  257     0.3KB/s   00:00    

.converted-launchers                          100%    0     0.0KB/s   00:00    

.bash_history                                 100% 3200     3.1KB/s   00:00    

.bash_logout                                  100%   18     0.0KB/s   00:00    

applet_dirlist                                100%    0     0.0KB/s   00:00    

saved_state                                   100%   65KB  64.5KB/s   00:00    

8f329b0c645a51e018b765fa0000001a-0            100%  463     0.5KB/s   00:00    


............

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

分发成功


四.批量部署:

这里的部署就结合了SHELL脚本批量管理和分发两个功能。

比如你要部署N台SSH服务端批量安装APACHE。

1.写好APACHE安装脚本。

2.将安装脚本分发到SSH服务端。

3.利用SHELL管理远端执行该脚本即可。


这里就不做过多演示,有机会我整理下我的LAMP文档,写个APACHE脚本,在这里演示下。


注:因为涉及风险操作。所以不推荐线上利用root用户进行批量管理操作。

建议设置普通账户,再利用sudo提权操作。



通过普通用户建立秘钥认证并sudo提权进行管理,分发,部署


(ssh server)

# useradd user02

# echo "123456" | passwd --stdin user02


(ssh client)

# useradd user01

# echo "123456" | passwd --stdin user01

# su - user01

# ssh-keygen -t dsa

注:默认三个回车完成创建

# ssh-copy-id -i .ssh/id_dsa.pub user02@192.168.100.29

输入密码123456,分发完毕


验证:

# ssh user02@192.168.100.29 /sbin/ifconfig eth0

返回192.168.100.29端IP即表明秘钥验证成功。


分发:

注:客户端user01用户现在可以免密码分发到服务端user02所属文件夹,但若想分发到root所属文件夹,则需要sudo提权。

1.服务端sudo提权:

# su - root

# echo "user02 ALL=(ALL) NOPASSWD:/usr/bin/rsync,/bin/tar,/usr/bin/scp,/bin/cp" >> /etc/sudoers

登录user02账户

# su - user02

查看账户信息:

# sodo -l

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

............

User user02 may run the following commands on this host:

   (ALL) NOPASSWD: /usr/bin/rsync, (ALL) /bin/tar, (ALL) /usr/bin/scp,(ALL) /bin/cp

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


2.客户端先分发到服务端user02用户家目录:

# scp -P22 -r -p /home/user01/ user02@192.168.100.29:/home/user02

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

.bash_logout                                  100%   18     0.0KB/s   00:00    

.bashrc                                       100%  124     0.1KB/s   00:00    

known_hosts                                   100%  396     0.4KB/s   00:00    

id_dsa                                        100%  672     0.7KB/s   00:00    

id_dsa.pub                                    100%  615     0.6KB/s   00:00    

.bash_profile                                 100%  176     0.2KB/s   00:00  

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


2.连接服务端后执行sudo cp命令执行本地拷贝:

# ssh -t user02@192.168.100.29 sudo cp /home/user02 /etc

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

Connection to 192.168.100.29 closed.

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

拷贝成功


注:

# cp /test1 /test2/

是将/test1目录拷贝到/test2/目录下

# cp /test1/ /test2/

是将/test1目录下的所有文件拷贝到/test2/目录下


-------大功告成--------



     本文转自 showerlee 51CTO博客,原文链接:http://blog.51cto.com/showerlee/1217651,如需转载请自行联系原作者



相关文章
|
6月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
573 10
|
6月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
567 2
|
9月前
|
Shell
Shell脚本循环控制:shift、continue、break、exit指令
使用这些命令可以让你的Shell脚本像有生命一样动起来。正确使用它们,你的脚本就能像一场精心编排的舞蹈剧目,既有旋律的起伏,也有节奏的跳跃,最终以一场惊艳的表演结束。每一个动作、每一个转折点,都准确、优雅地完成所需要表达的逻辑。如此,你的脚本不只是冰冷的代码,它透过终端的界面,跳着有节奏的舞蹈,走进观众——使用者的心中。
339 60
|
12月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
6月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
8月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
967 1
|
10月前
|
存储 Unix Shell
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
391 17
|
11月前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
1343 25
|
10月前
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
299 4
|
10月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
548 3