利用群晖NAS+shell脚本实现运维命令执行结果文件自动上传
一、 需求场景如下
通过堡垒机批量运维Linux服务器,例如执行命令后的结果输出到文件后,然后将输出的结果文件统一发送到一个文件服务器上进行汇总
然后登录这个文件服务器上批量查看结果文件
二、实现过程思考
1、可以用使用群晖NAS作为这个文件服务器,但是通过什么协议上传会比较方便一点,上传时要考虑能够免输入账号密码
这时scp或者rsync会比较合适
(图片点击放大查看)
2、群晖需要开启rsync
(图片点击放大查看)
3、如果用rsync方式的话上传过来,需要考虑到多台服务器上传过来时,在文件名中加入对应服务器IP或者主机名进行区分
参考群晖官网的文档《如何通过SSH使用RSA密钥对登录DSM?》后,编写脚本最终实现了需求
https://kb.synology.cn/zh-cn/DSM/tutorial/How_to_log_in_to_DSM_with_key_pairs_as_admin_or_root_permission_via_SSH_on_computers
三、具体的实现步骤
1、SSH登录群晖NAS
sudo -i 切换成root用户 生成密钥 ssh-keygen -t rsa -b 2048 cp id_rsa.pub /volume1/homes/yuanfan/.ssh/authorized_keys cp id_rsa /volume1/homes/yuanfan/.ssh/nas_id_rsa.pem
(图片点击放大查看)
再退出root用户
cd .ssh/ chown -R yuanfan:users authorized_keys
(图片点击放大查看)
2、然后NAS Web界面上面下载这个nas_id_rsa.pem
(图片点击放大查看)
上传这个Linux服务器上面
测试是否可以免密登录NAS的SSH
chmod 0600 nas_id_rsa.pem ssh -i nas_id_rsa.pem yuanfan@192.168.31.200
(图片点击放大查看)
3、编写脚本
执行命令后的结果输出到文件后,然后将输出的结果文件统一发送到NAS文件服务器的这个路径/volume1/ShareFolder/LinuxServer_commandresult
例如要执行的命令是df -PTh(这里只是简单举例,方便演示)
这里为了省去每台服务器上都上传密钥文件,直接将密钥文件内容转到文件的过程写到脚本中
server_command_result-upload.sh
(图片点击放大查看)
vim server_command_result-upload.sh #!/bin/bash cat > /tmp/nas_id_rsa.pem << EOF -----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn NhAAAAAwEAAQAAAQEAy0SKLeKH7Pa1DU1HEND2GBKj9GkH9iq0rQqDkaXM0jZbHBcV0pe3 YpVzwlsxETfwMMJmJVt/Ihxj/5LPRa9M+vAhmMb1Nj58FLG3UMVpp9pBwJCU4xAR1ou74N tSwfrTdjOhzMGPen+Lnht5/P6/4rH74cJ9sSbO6DrKR8sNOZZYxql7RHs+sbLFAI0RUQhn xTBskSVtBqVX9M2wg5F3txdkjZbGYnHjkKzZhMt7rWuVs2m5xsGc60fa77xeaPGSYHChWw SAUZQQ1KZSNJFshaEyl7wMwm2UVR3w48RxgdHxy/iOZ8VMxSqxd2NIGyLQTxD3PAvnNcyc YXh0prfU5QAAA8g8H4q7PB+KuwAAAAdzc2gtcnNhAAABAQDLRIot4ofs9rUNTUcQ0PYYEq P0aQf2KrStCoORpczSNlscFxXSl7dilXPCWzERN/AwwmYlW38iHGP/ks9Fr0z68CGYxvU2 PnwUsbdQxWmn2kHAkJTjEBHWi7vg21LB+tN2M6HMwY96f4ueG3n8/r/isfvhwn2xJs7oOs pHyw05lljGqXtEez6xssUAjRFRCGfFMGyRJW0GpVf0zbCDkXe3F2SNlsZiceOQrNmEy3ut a5WzabnGwZzrR9rvvF5o8ZJgcKFbBIBRlBDUplI0kWyFoTKXvAzCbZRVHfDjxHGB0fHL+I 5nxUzFKrF3Y0gbItBPEPc8C+c1zJxheHSmt9TlAAAAAwEAAQAAAQBA0qbOY0O9yh+LEm3r avhQTQGEXEpxssTTulqjBCEBmNwNZT9MXZ3aDpdQEAzh1NkAc75ng3pTwoIRaxw2uOTv0c ylEC37Eoo3f0VauNos8Wmuo20XzHQj24Qa/VazDe6J74VV6xR6mFpKHbEVgZhoDyKoqIG1 EQ9C+ByyMIsTJdD9Dbw9Oe6zdL/I5aLHIDb7I8nCNWgSEu/GLdMBRruQlE9e5CwG7tY79B 4UQbcXj+jAnbLrRvaDjPj3RJbXXXXXXXXXXXXXXXucTl5G/UZMxuUF4YF8Uon0DacO6ag2 mvLSTWO3RfYV8D3Z4ZA5GnY7YlwWxMjPHVzgbQOZvrgxAAAAgQCL9xA6/MIEJGWXMs5XI7 L1A8c69FaKd4yGvcJQpFK/6XT8EFKARoZ13u5/tLUfnoy+IE01BZTN0u92N07hrGHrpNVi 6KE72YdRDlGujZNi5LI1Y4omavK63r4mJeP1VaQEQtKlt4K7kGvxK+UqBBcrWGDy3R1oMO J0LWNS31W8wAAAAIEA/OASa4cgk2jmpEfcb/SssGAoTPaQyZyc30rW49hpbwqDJUIckG4/ 3ufuyViv15zZORaQDMkpK+VQ8k4iiOf3YeGU2KHzCrh3I5fcg5wWFdWLdVgNT+TzS6ReNg pegXchwIuPrG+ajQLv1+NB+PrTKH0vqHHbHmEzC3pughMeYgcAAACBAM3HivGezbXyxL0k m+jJVgHTh/DjDgVDlYGEtUdEAAsh4Asf7R4nNpwFKufYOw4GlsR54v2TZliw3bgGafzGPr IgK7cG/kM7ZtmkVwdQwh70hEAbAM//+FIdYExPH/uzC8vEZnULf+LXK9wmPbNWd4u5FM7m AleakBwsijd6oeazAAAAD3Jvb3RARFM5MThfRFNNNwECAw== -----END OPENSSH PRIVATE KEY----- EOF chmod 600 /tmp/nas_id_rsa.pem FILENAME=$(hostname)_$(hostname -I | tr ' ' '_') df -PTh > /tmp/${FILENAME}.txt rsync -avz -e "ssh -i /tmp/nas_id_rsa.pem -o StrictHostKeyChecking=no" /tmp/${FILENAME}.txt yuanfan@192.168.31.200:/volume1/ShareFolder/LinuxServer_commandresult
4、批量运维
(图片点击放大查看)
这时我模拟堡垒机批量上传脚本并执行的过程
(图片点击放大查看)
(图片点击放大查看)
5、NAS上查看脚本自动上传的结果文件
(图片点击放大查看)
我上面只在两台服务器上执行,当你有多台服务器时批量执行该脚本就大大提高了效率