阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

SSH无密码登录远程主机执行特定命令的注意事项

428次阅读
没有评论

共计 2275 个字符,预计需要花费 6 分钟才能阅读完成。

最近的一个项目要结合使用 rabbitmq、keepalived、supervisor。其中的一个场景为某个 keepalived 实例被提升为 MASTER 后需要到部署了 rabbitmq client 的远程主机上 kill 掉这些 client 进程。

一般的思路为配置 keepalived 所在主机与部署了 client 的主机之间的无密码 ssh 登录,然后通过 ssh 执行远程命令,先获取各 client 进程的进程号,然后逐个 kill 掉这些进程。

大体思路很简单,但过程中却碰到了不少问题。配置无密码 ssh 至远程主机的步骤比较简单。在此不多说。配置好后可以直接在脚本中使用:
ssh -p PORT IP “command”
或者
ssh -p PORT IP ‘command’
来在远程主机执行命令了。

先说说总设计问题。
刚开始是直线式的思维:先通过 ssh 远程获取 client 进程号,对于每个进程号分别 ssh 至远程执行 kill 操作。因为有多台 keepalived 实例分别运行于不同主机,这就需要在每个主机上维护一份需要处理的 client 列表,且需要多次通过 ssh 到远程部署 client 的主机执行获取进程号、杀进程的命名。这对于维护和性能来讲都是比较恶心的。

换一种思维方式,既然查进程后和 kill 进程号的操作都是在远程主机中完成的。为何不只在该远程主机维护一份需处理的 client 列表且把获取进程号和杀进程的这些操作封装成一个脚本放在该远程主机?这样其余的各 keepalived 实例所在主机只需在 ssh 命名中调用一次远程主机的脚本便可。省去了很多不必要的步骤。

上边是应用设计上的问题,可见在进行一个项目之前考虑清楚最优方案可为后续的实施减少多少的麻烦。遇到一个问题一定要从多个方面考虑。且尽量使用最简单的方式而不是最高大上的最复杂的的方式。

再来说所碰到的一些细节问题。
ssh -p PORT IP “command”
或者
ssh -p PORT IP ‘command’
的 command 中若包含变量的话,变量要用对应的引号引起来才能得以正确解析(实际上是 shell 中的字符串拼接)。
如:
consumer=worker_for_summary.py

ssh -p PORT IP “ps -ef | grep “$consumer” |grep -v grep”

ssh -p PORT IP ‘ps -ef | grep ‘$consumer’ |grep -v grep’
使用如下命令时不行的
ssh -p PORT IP ‘ps -ef | grep $consumer |grep -v grep’

另外在 ssh 中使用 awk 也需要注意,因为 awk 命令中使用单引号表明要执行的动作,所以相应的 ssh 中包围 command 的引号要改成双引号且 awk 中的“$”值为参数要加转移符
如:
consumer=worker_for_summary.py

ssh -p PORT IP “ps -ef | grep “$consumer” |grep -v grep | awk ‘{print \$2}'”
使用其他任何方式是不行的。

最后说说在 shell 脚本中使用 ssh 的注意
一般情况下执行 ssh -p PORT IP “command” 默认是使用当前用户到远程主机执行命令的。
若将 ssh -p PORT IP “command” 封装进了脚本,则会使用执行脚本时使用的用户登录至远程主机执行命令。
我们的应用中将 ssh -p PORT IP “command” 封装进了脚本,该脚本会在 keepalived 实例进入 MASTER 状态后由 keepalived 调用,而 keepalived 是由 root 用户启动的所以实际上会以 root 用户至远程主机执行命令。而我们配置的无密码 ssh 至远程主机用的是非 root 用户的工作(一般情况下是当前用户的公钥),因此远程命令不能成功执行,提示需要密码,即使是在 ssh -p PORT IP “command” 中加入用户信息变为 ssh -p PORT norootuser@IP “command” 也不行。因此通过生成 root 用户的公钥并配置无密码 ssh 到远程主机来规避了该问题。

在试密码的时候,记错了密码导致账户被锁定不能登录,可以通过 faillog 命令查看失败记录并设置登录失败限制。
如:
查看用户登录失败情况
sudo faillog -u op1
重置用户
sudo faillog -u op1 -r

提高 Ubuntu 的 SSH 登陆认证速度的办法 http://www.linuxidc.com/Linux/2014-09/106810.htm

开启 SSH 服务让 Android 手机远程访问 Ubuntu 14.04  http://www.linuxidc.com/Linux/2014-09/106809.htm

如何为 Linux 系统中的 SSH 添加双重认证 http://www.linuxidc.com/Linux/2014-08/105998.htm

在 Linux 中为非 SSH 用户配置 SFTP 环境 http://www.linuxidc.com/Linux/2014-08/105865.htm

Linux 上 SSH 服务的配置和管理 http://www.linuxidc.com/Linux/2014-06/103627.htm

SSH 入门学习基础教程 http://www.linuxidc.com/Linux/2014-06/103008.htm

SSH 免密码登录详解  http://www.linuxidc.com/Linux/2015-03/114709.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-04/116700.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计2275字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19352
评论数
4
阅读量
8120644
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装 2026 年最强个人助理 ClawdBot、完整安装教程 一、前言 学不完,根本学不完!近期,一款名...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
免费领取huggingface的2核16G云服务器,超简单教程

免费领取huggingface的2核16G云服务器,超简单教程

免费领取 huggingface 的 2 核 16G 云服务器,超简单教程 前言 HuggingFace.co...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...