【shell】远程执行shell|多节点并行执行|远程登录执行

目录

前提条件

shell远程执行

多节点上并发执行命令的三种方法

方法1 使用bash执行命令

方法2 使用clustershell执行命令--还能收集结果

方法3 使用pdsh 执行命令

远程执行注意事项

连接确认机制可能阻碍自动化

远程执行nohup的注意

批量自动登陆远程服务器执行shell脚本

Linux ssh 文件 authorized_keys 和 known_hosts

 Linux Shell远程执行命令(命令行与脚本方式)

SSH命令格式

主要参数说明

ssh控制远程主机,远程执行命令步骤

问题

为什么没有生成known_host文件

使用记录


作者:bandaoyu 文章随时更新,原文:https://blog.csdn.net/bandaoyu/article/details/121189426

  • 前提条件

  配置ssh免密码登陆,方法:https://blog.csdn.net/bandaoyu/article/details/83312891

  • shell远程执行

对于简单的命令

如果是简单执行几个命令,则:

ssh user@remoteNode "cd /home ; ls"

注意的点:

双引号,必须有。如果不加双引号,第二个ls命令在本地执行

分号,两个命令之间用分号隔开

对于脚本的方式

有些远程执行的命令内容较多,单一命令无法完成,考虑脚本方式实现:

#!/bin/bash
ssh user@remoteNode > /dev/null 2>&1 << eeooff
cd /home
touch abcdefg.txt
exit
eeooff
echo done!

远程执行“<< eeooff ” 至“ eeooff ”之间的内容,注意的点:

<< eeooff,ssh后直到遇到eeooff这样的内容结束,eeooff可以随便修改成其他形式。

重定向目的在于不显示远程的输出了

在结束前,加exit退出远程节点

http://www.cnblogs.com/ilfmonday/p/ShellRemote.html

  • 多节点上并发执行命令的三种方法

有两种模式:串行模式和并行模式。

在串行模式下,该命令一个接一个节点上地执行。(串行模式易于使用和调试)

在并行模式下,命令将在多个节点上一起执行。(并行模式通常要快得多)

通过示例介绍3个方法以用户“ root”的身份在节点“ lnode31 lnode6 cluster1-1 cluster1-2…cluster1-8”上执行命令hostname 。

方法1 使用bash执行命令

使用SSH上的Bash以串行顺序(一对一)运行命令(Run commands in serial order (one by one) using Bash over SSH)

for h in lnode31 lnode6 cluster1-{1..8} ; do

ssh root@$h hostname

done

使用SSH上的Bash并行运行命令(Run commands in parallel using Bash over SSH)

for h in lnode31 lnode6 cluster1-{1..8} ; do

ssh root@$h hostname &

done

wait

优点:Bash在Linux节点上几乎总是可用。 您可以在每次ssh调用后执行某些检查逻辑。

缺点:命令的长度有点长。

方法2 使用clustershell执行命令--还能收集结果

clustershell / clush是用于在集群上并行执行命令的程序。 clush还可以收集命令的结果。 如果尚未在管理节点上安装它,则可以安装软件包clustershell (在Fedora Linux上)。

通过SSH使用clustershell并行运行命令

$ clush -l root -w lnode31,lnode6,cluster1-[1-8] hostname
$ clush -l root -w 182.200.31.65,182.200.31.66,182.200.31.109  hostname

命令最好加上双引号(否则sed等命令会报错):

$ clush -l root -w lnode31,lnode6,cluster1-[1-8] "hostname"
$ clush -l root -w 182.200.31.65,182.200.31.66,182.200.31.109  "cat /etc/hosts"

优点: clush专为并行执行而设计。 clush还可以交互执行命令。

缺点:您将需要在管理节点上安装软件 。

更多用法:clush  -h

 yum install -y clustershell 

方法3 使用pdsh 执行命令

pdsh是rsh命令的变体,而pdsh可以并行运行多个远程命令。 pdsh也可以在交互模式下运行。 如果尚未在管理节点上安装它,则需要首先安装软件包pdsh abd pdsh-rcmd-ssh (在Fedora Linux上)。

通过SSH使用pdsh并行运行命令

$ pdsh -R ssh -l root -w lnode31,lnode6,cluster1-[1-8] hostname

命令最好加上双引号(否则sed等命令会报错):

$ pdsh -R ssh -l root -w lnode31,lnode6,cluster1-[1-8] "hostname"

有关pdsh更多用法,请查看pdsh手册页 。

优点和缺点:类似于clush 。 另外, pdsh支持除ssh之外的其他rcmd模块,例如rsh和exec。

这三种方法应有助于更轻松地管理Linux节点集群。 还有其他喜欢的工具来执行ssh命令吗? 通过评论与我们分享。

翻译自: Three Methods of Executing Commands on Many Nodes in Parallel via SSH on Linux - SysTutorials

远程执行注意事项

连接确认机制可能阻碍自动化

https://www.cnblogs.com/klb561/p/11013774.html

 当通过ssh连接远程服务器的时候,可能会出现以下繁琐场景,需要手工输入yes:

ssh username@ip

 这对于自动化来说是不行的。

原因是:

SSH 公钥检查是一个重要的安全机制,可以防范中间人劫持等黑客攻击。但是在特定情况下,严格的 SSH 公钥检查会破坏一些依赖 SSH 协议的自动化任务,就需要一种手段能够绕过 SSH 的公钥检查。

什么是SSH公钥检查
SSH 连接远程主机时,会检查主机的公钥。如果是第一次该主机,会显示该主机的公钥摘要,提示用户是否信任该主机:

The authenticity of host '10.0.0.1 (10.0.0.1)' can't be established.
ECDSA key fingerprint is 91:63:21:08:4a:96:23:5b:f6:98:c9:a8:cd:cb:8b:91.
Are you sure you want to continue connecting (yes/no)?

当选择接受,就会将该主机的公钥追加到文件 ~/.ssh/known_hosts 中。当再次连接该主机时,就不会再提示该问题了。

如何去掉公钥确认?
在首次连接服务器时,会弹出公钥确认的提示。这会导致某些自动化任务由于初次连接服务器而任务中断。或者由于~/.ssh/known_hosts 文件内容清空,导致自动化任务中断。 SSH 客户端的 StrictHostKeyChecking 配置指令,可以实现当第一次连接服务器时,自动接受新的公钥。只需要修改 /etc/ssh/ssh_config 文件,包含下列语句:

Host *
StrictHostKeyChecking no

或者在 ssh 命令行中用 -o 参数

$ ssh -o StrictHostKeyChecking=no 10.0.0.1

ssh StrictHostKeyChecking ;https://www.jianshu.com/p/ebcf41c75786

用OpenSSH的人都知ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告

远程执行nohup的注意

(sshpass 密码及nohup处理记录_sshpass nohup_weixin_40455124的博客-CSDN博客)

如果远程执行nohup,从测试结果看需要指定输出,否则sshpass会一直等待exit或无法启动。

#!/bin/bash
cd /data/app/prometheus/process
nohup ./process-exporter -network -threads=false -gather-smaps=false -config.path app.yaml >nohup.out 2>&1 &
#nohup /data/app/prometheus/process/start.sh &
sleep 1
exit

以上代码关键是增加了 >nohup.out 2>&1

批量自动登陆远程服务器执行shell脚本

(摘自:批量自动登陆远程服务器执行shell脚本_shttps://blog.csdn.net/arv002/article/details/105982354)

需要在脚本主机上安装sshpass:

yum install sshpass -y

ip_config:文件用来存放ip地址,每一行一个IP地址。

    batch.sh :脚本代码。

   ip_config内容如下: 

[root@node1 lyx]# cat ip_config 
192.168.48.132
192.168.48.133

batch.sh 内容如下:

cmd变量里面的内容就是我们需要输入批量执行的shell命令。

username为用户账号,统一为root

passwd为用户的密码,建议将所有服务器的密码设置为统一的。

[root@node1 lyx]# cat batch.sh 
username="root"
passwd="******"
port="22"
timeout=3
cmd="mkdir /home/test 2>&1;echo 123;"
 
for host in `cat ip_config`
do
        result=""
        result=`sshpass -p '$passwd' ssh -p $port -o StrictHostKeyChecking=no -o ConnectTimeout=$timeout $username@$host $cmd`
        echo $host >> result.txt
 
        echo $result >> result.txt
done
echo "finish"

密码使用最好保存使用’(单引号),否则无法使用特殊字符作为密码,如

sshpass -p '!otherpart' ssh app@192.168.138.11 'ls -ltr'

也可以使用-e 模式,-e可以不加单引号

执行脚本

sh batch.sh

注意事项

2.单引号''和双引号""
两者都是解决变量中间有空格的问题。

在bash中“空格”是一种很特殊的字符,比如在bash中这样定义str=this is String,这样就会报错,为了避免出错就得使用单引号''和双引号""。

单引号'',双引号""的区别是

单引号''剥夺了所有字符的特殊含义,单引号''内就变成了单纯的字符,。

双引号""则对于双引号""内的参数替换($)和命令替换(``)是个例外。

比如说 n=3

echo '$n'

结果就是$n

改成双引号 echo "$n",结果就是3
原文链接:https://blog.csdn.net/qq_40491569/article/details/83688652

Linux ssh 文件 authorized_keys 和 known_hosts

authorized_keys
常规我们ssh连接到其他服务器的时候是需要输入密码的,这个文件中可以实现你的免密登录连接,只需要两步操作:

1、在要被连接的目标服务器上生成 ssh 公钥 xxx.pub(关键命令为 ssh-keygen 本文不做赘述)
2、将远程服务器上生成的 xxx.pub 中的内容,拷贝到当前服务器的 ~/.ssh/authorized_keys 中(不存在自己创建)

这样再进行 ssh 连接目标服务器的时候,就不会提示输入密码了,结果是直接连接成功。

known_hosts
第一次连接其他服务器的时候,会有一个一大串的提示 “Are you sure you want to continue connecting (yes/no)” 我们是否确认要连接到目标服务器。当我们确认后,这个远程服务器的信息就会被记录到我们本地的 ~/.ssh/known_hosts 中(如果一开始不存在则会自动创建),这个文件里面有我们刚刚连接的服务器的信息。
known_hosts 文件每连接一个新的远程服务器都会被追加产生一条新的数据记录。包括远程机器ip、远程机器公钥

当我们以后再连接之前连接过的目标服务器时,因为 known_hosts 文件中记录了我们曾经连接过,所有就不会在提示询问我们是否要连接了。

注意这两个文件是在用户目录中的,所以要和你当前用户对应,例如 root 用户就是 /root/.ssh/ 目录。
~/ 是引用当前用户主目录的写法。

原文链接:https://blog.csdn.net/catoop/article/details/119350507

  •  Linux Shell远程执行命令(命令行与脚本方式)

相关资源:通过案例精通parallel并行命令 利用多核CPU来加速你的Linux命令

原文:linux ssh执行命令_在Linux上通过SSH在多个节点上并行执行命令的三种方法_cuma2369的博客-CSDN博客

目录 [隐藏]

SSH命令格式

usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]  
           [-D [bind_address:]port] [-e escape_char] [-F configfile]  
           [-I pkcs11] [-i identity_file]  
           [-L [bind_address:]port:host:hostport]  
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]  
           [-R [bind_address:]port:host:hostport] [-S ctl_path]  
           [-W host:port] [-w local_tun[:remote_tun]]  
           [user@]hostname [command]  

主要参数说明

-l 指定登入用户
-p 设置端口号
-f 后台运行,并推荐加上 -n 参数
-n 将标准输入重定向到 /dev/null,防止读取标准输入。如果在后台运行ssh的话(-f选项),就需要这个选项。
-N 不执行远程命令,只做端口转发
-q 安静模式,忽略一切对话和错误提示
-T 禁用伪终端配置
-t (tty)为远程系统上的ssh进程分配一个伪tty(终端)。如果没有使用这个选项,当你在远程系统上运行某条命令的时候,ssh不会为该进程分配tty(终端)。相反,ssh将会把远端进程的标准输入和标准输出附加到ssh会话上去,这通常就是你所希望的(但并非总是如此)。这个选项将强制ssh在远端系统上分配tty,这样那些需要tty的程序就能够正常运行。
-v verbose)显示与连接和传送有关的调试信息。如果命令运行不太正常的话,这个选项就会非常有用。

ssh控制远程主机,远程执行命令步骤

第一步,设置ssh免认证,免认证就是不用密码认证就可以直接登录,这在写脚本服务器控制时特别有用。

每二步,就是到远端服务器上去执行命令

准备工作

基于公私钥认证(可参考:Linux配置SSH密钥登录详解及客户端测试使用无密码登录)或者用户名密码认证(可参考:SSH使用expect自动输入密码、命令实现非交互式密码授权)能确保登录到远程服务器
cmd如果是脚本,注意绝对路径问题(相对路径在远程执行时就是坑)

基于公私钥认证远程登录可能存在的不足

这个可以满足我们大多数的需求,但是通常运维部署很多东西的时候需要root权限,但是有几处限制:
远程服务器禁止root用户登录
在远程服务器脚本里转换身份用expect需要send密码,这样不够安全

ssh 执行远程命令格式

ssh [options] [user@]host [command]

其中,host为想要连接到的OpenSSH服务器(远程系统)的名称,它是惟一的必需参数。host可以是某个本地系统的名称,也可以是因特网上某个系统的FQDN(参见术语表)或者是一个IP地址。命令ssh host登录到远程系统host,使用的用户名与正在本地系统上使用的用户名完全相同。如果希望登录的用户名与正在本地系统上使用的用户名不同,那么就应该包含user@。根据服务器设置的不同,可能还需要提供口令。

打开远程shell

如果没有提供command参数,ssh就会让你登录到host上去。远程系统显示一个shell提示符,然后就能够在host上运行命令。命令exit将会关闭与host的连接,并返回到本地系统的提示符。

例:命令行执行登录并且在目标服务器上执行命令

ssh user@remoteNode "cd /home ; ls"

基本能完成常用的对于远程节点的管理了,几个注意的点:
如果想在远程机器上连续执行多条命令,可以用单引号或者双引号将这些命令括起来。如果不加单引号或者双引号,第二个ls命令在本地执行。例如 ssh user@node cd /local ls 则 ls 只会执行 cd /local 命令,ls命令在本地执行,加了双引号或者单引号,则被括起来的命令被当做ssh命令的一个参数,所以会在远程连续执行。
分号,两个命令之间用分号隔开

例:在目标服务器上执行批量的命令。

#!/bin/bash  
ssh root@192.168.0.23   < < remotessh  
killall -9 java  
cd /data/apache-tomcat-7.0.53/webapps/  
exit  
remotessh  

远程执行的内容在"< < remotessh " 至" remotessh "之间,在远程机器上的操作就位于其中,注意的点:<< remotessh,ssh后直到遇到remotessh这样的内容结束,remotessh可以随便修改成其他形式。在结束前,加exit退出远程节点 如果不想日志文件在本机出现可以修改配置

ssh root@192.168.0.23 > /dev/null 2>&1   < < remotessh

ssh的-t参数

-t      Force pseudo-tty allocation.  This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services.  Multiple -t options force tty allocation, even if ssh has no local tty.  

中文翻译一下:就是可以提供一个远程服务器的虚拟tty终端,加上这个参数我们就可以在远程服务器的虚拟终端上输入自己的提权密码了,非常安全
命令格式

ssh -t -p $port $user@$ip  'cmd'  

示例脚本

#!/bin/bash  
  
#变量定义  
ip_array=("192.168.1.1" "192.168.1.2" "192.168.1.3")  
user="test1"  
remote_cmd="/home/test/1.sh"  
  
#本地通过ssh执行远程服务器的脚本  
for ip in ${ip_array[*]}  
do  
    if [ $ip = "192.168.1.1" ]; then  
        port="7777"  
    else  
        port="22"  
    fi  
    ssh -t -p $port $user@$ip "remote_cmd"  
done  

这个方法还是很方便的,-t虚拟出一个远程服务器的终端,在多台服务器同时部署时确实节约了不少时间啊!

例:查看远程服务器的cpu信息
假设远程服务器IP是192.168.110.34
ssh -l www-online 192.168.110.34 “cat /proc/cpuinfo”

例:执行远程服务器的sh文件
首先在远程服务器的/home/www-online/下创建一个uptimelog.sh脚本

#!/bin/bash  
  
uptime >> 'uptime.log'  
  
exit 0

使用chmod增加可执行权限

chmod u+x uptimelog.sh

在本地调用远程的uptimelog.sh

ssh -l www-online 192.168.110.34 "/home/www-online/uptimelog.sh"

执行完成后,在远程服务器的/home/www-online/中会看到uptime.log文件,显示uptime内容

www-online@nmgwww34:~$ tail -f uptime.log  
21:07:34 up 288 days,  8:07,  1 user,  load average: 0.05, 0.19, 0.31  

例:执行远程后台运行sh
首先把uptimelog.sh修改一下,修改成循环执行的命令。作用是每一秒把uptime写入uptime.log

#!/bin/bash  
  
while :  
do  
  uptime >> 'uptime.log'  
  sleep 1  
done  
  
exit 0

我们需要这个sh在远程服务器以后台方式运行,命令如下:
ssh -l www-online 192.168.110.34 “/home/www-online/uptimelog.sh &”

www-online@onlinedev01:~$ ssh -l www-online 192.168.110.34 "/home/www-online/uptimelog.sh &"  
www-online@192.168.110.34's password: 

输入密码后,发现一直停住了,而在远程服务器可以看到,程序已经以后台方式运行了。

www-online@nmgwww34:~$ ps aux|grep uptimelog.sh  
1007     20791  0.0  0.0  10720  1432 ?        S    21:25   0:00 /bin/bash /home/www-online/uptimelog.sh

原因是因为uptimelog.sh一直在运行,并没有任何返回,因此调用方一直处于等待状态。
我们先kill掉远程服务器的uptimelog.sh进程,然后对应此问题进行解决。

ssh 调用远程命令后不能自动退出解决方法
可以将标准输出与标准错误输出重定向到/dev/null,这样就不会一直处于等待状态。
ssh -l www-online 192.168.110.34 “/home/www-online/uptimelog.sh > /dev/null 2>&1 &”

www-online@onlinedev01:~$ ssh -l www-online 192.168.110.34 "/home/www-online/uptimelog.sh > /dev/null 2>&1 &"  
www-online@192.168.110.34's password:  
www-online@onlinedev01:~$  

但这个ssh进程会一直运行在后台,浪费资源,因此我们需要自动清理这些进程。

实际上,想ssh退出,我们可以在ssh执行完成后kill掉ssh这个进程来实现。
首先,创建一个sh执行ssh的命令,这里需要用到ssh的 -f 与 -n 参数,因为我们需要ssh也以后台方式运行,这样才可以获取到进程号进行kill操作。
创建ssh_uptimelog.sh,脚本如下

#!/bin/bash  
  
ssh -f -n -l www-online 192.168.110.34 "/home/www-online/uptimelog.sh &" # 后台运行ssh  
  
pid=$(ps aux | grep "ssh -f -n -l www-online 192.168.110.34 /home/www-online/uptimelog.sh" | awk '{print $2}' | sort -n | head -n 1) # 获取进程号  
  
echo "ssh command is running, pid:${pid}"  
  
sleep 3 && kill ${pid} && echo "ssh command is complete" # 延迟3秒后执行kill命令,关闭ssh进程,延迟时间可以根据调用的命令不同调整  
  
exit 0  

可以看到,3秒后会自动退出

www-online@onlinedev01:~$ ./ssh_uptimelog.sh  
www-online@192.168.110.34's password:  
ssh command is running, pid:10141  
ssh command is complete  
www-online@onlinedev01:~$  

然后查看远程服务器,可以见到uptimelog.sh 在后台正常执行。

www-online@nmgwww34:~$ ps aux|grep uptime  
1007     28061  0.1  0.0  10720  1432 ?        S    22:05   0:00 /bin/bash /home/www-online/uptimelog.sh  

查看uptime.log,每秒都有uptime数据写入。

www-online@nmgwww34:~$ tail -f uptime.log  
22:05:44 up 288 days,  9:05,  1 user,  load average: 0.01, 0.03, 0.08  
22:05:45 up 288 days,  9:05,  1 user,  load average: 0.01, 0.03, 0.08  
22:05:46 up 288 days,  9:05,  1 user,  load average: 0.01, 0.03, 0.08  
22:05:47 up 288 days,  9:05,  1 user,  load average: 0.01, 0.03, 0.08  
22:05:48 up 288 days,  9:05,  1 user,  load average: 0.01, 0.03, 0.08  

附录:
1、单引号和双引号在ssh命令中的区别:
以一个例子来说明问题,

假设本地机器上配置了JAVA环境变量,在本地执行 echo $JAVA_HOME=/opt/jdk

假若我想查看远程机器上的JAVA环境变量,则只能使用单引号了,ssh user@node ‘ echo $JAVA ‘, 则是’ ‘ 中的$JAVA不会被shell解析,而是当做一个字符串,此时参数 echo $JAVA 传递给了 ssh;

如果我们使用 ssh user@node ” echo $JAVA “,则 shell 首先会解析$JAVA,得到它的值,则该命令就变成了 ssh user@node ‘ echo /opt/jdk ‘ 了

2、可能遇到的问题
问题:远程登录主机时出现Pseudo-terminal will not be allocated because stdin is not a terminal. 错误
解决方案:字面意思是伪终端将无法分配,因为标准输入不是终端。

所以需要增加-t -t参数来强制伪终端分配,即使标准输入不是终端。
to force pseudo-tty allocation even if stdin isn’t a terminal.

参考样例如下:
ssh -t -t user1@host1 -p 9527

参考资料:
ssh远程执行命令并自动退出:http://blog.csdn.net/fdipzone/article/details/23000201

http://www.3mu.me/linux%E4%B8%AD%E7%9A%84shell%E7%94%A8ssh%E8%87%AA%E5%8A%A8%E7%99%BB%E5%BD%95%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%90%8E%E6%89%A7%E8%A1%8C%E5%91%BD%E4%BB%A4%E5%B9%B6%E8%87%AA%E5%8A%A8/

原文:Linux Shell远程执行命令(命令行与脚本方式) - 沧海一滴 - 博客园

问题

为什么没有生成known_host文件

为什么没有生成known+host文件;https://zhidao.baidu.com/question/1774988333368739900.html

没有很正常呀!

known_host这个文件夹 表示ssh连接时不识别的主机,才会记录到这个文件中。说明你的配置正确,并且没有使用未获得公钥的主机进行ssh连接.

使用记录

配置文件中有host列表

[mon]
all_manage_ip = 182.200.31.55, 182.200.31.59, 182.200.31.60
all_public_ip = 172.17.31.55, 172.17.31.59, 172.17.31.60
all_cluster_ip = 192.168.31.55, 192.168.31.59, 192.168.31.60
master_zk_id = 4ee6279f-a0ed-48a1-9dc7-cb4eabdc40ea
master_mon_manage_ip = 182.200.31.55, 182.200.31.59, 182.200.31.60
master_mon_public_ip = 172.17.31.55, 172.17.31.59, 172.17.31.60
master_mon_cluster_ip = 192.168.31.55, 192.168.31.59, 192.168.31.60
latest_normal_mon = 182.200.31.55

摘取出all_manage_ip = 182.200.31.55, 182.200.31.59, 182.200.31.60中的182.200.31.55, 182.200.31.59, 182.200.31.60,并逐一执行"cat /etc/ceph/ceph.conf '"

line=`cat /etc/ceph/ceph.conf |grep -E 'all_manage_ip'`&&HOSTS=$(echo ${line#*=}|sed s/[[:space:]]//g)&&sudo clush -l root -w ${HOSTS}  "cat /etc/ceph/ceph.conf'"

1039  ceph -s
 1040  systemctl daemon-reload
 1041  ceph -s
 1042  systemctl start ceph-mds.target
 
restart ceph
sudo systemctl restart ceph.target
 
 
显示ceph
sudo ps -aux|grep -E 'ceph-/*|dse'|grep -v 'grep'|awk '{print $12,$13,$14,$15,$16,$17}'
 
显示配置
 
cat /etc/ceph/ceph.conf |grep -E 'ms_public_io_type|ms_public_type|ms_cluster_type'
 
 改配置项:
 改public配置为Posix
 sed -i 's/^ms_public_type[[:space:]]\+=.*/ms_public_type = async+posix/' /etc/ceph/ceph.conf
 
 改public配置为rdma
 sed -i 's/^ms_public_type[[:space:]]\+=.*/ms_public_type = async+rdma/' /etc/ceph/ceph.conf
 
改cluster配置为Posix
 sed -i 's/^ms_cluster_type[[:space:]]\+=.*/ms_cluster_type = async+posix/' /etc/ceph/ceph.conf
 
改cluster配置为Rdma
 sed -i 's/^ms_cluster_type[[:space:]]\+=.*/ms_cluster_type = async+rdma/' /etc/ceph/ceph.conf
 
改public_io为rdma
sed -i 's/^ms_public_io_type[[:space:]]\+=.*/ms_public_io_type = async+rdma/' /etc/ceph/ceph.conf
 
改public_io为posix
sed -i 's/^ms_public_io_type[[:space:]]\+=.*/ms_public_io_type = async+posix/' /etc/ceph/ceph.conf
 
 
 
 sed -i 's/^ms_public_type[[:space:]]\+=.*/ms_public_type = async+posix/' /etc/ceph/ceph.conf
 sed -i 's/^ms_cluster_type[[:space:]]\+=.*/ms_cluster_type = async+posix/' /etc/ceph/ceph.conf
 sed -i 's/^ms_public_io_type[[:space:]]\+=.*/ms_public_io_type = async+posix/' /etc/ceph/ceph.conf
 
 
 
 
 
集群:
 
显示配置
 
line=`cat /etc/ceph/ceph.conf |grep -E 'mon_host'`&&HOSTS=$(echo ${line#*=}|sed s/[[:space:]]//g)&&sudo clush -l root -w ${HOSTS}  "cat /etc/ceph/ceph.conf |grep -E 'ms_public_io_type|ms_public_type|ms_cluster_type'"
 
 
 
改配置项:
 改public配置为Posix
 
line=`cat /etc/ceph/ceph.conf |grep -E 'mon_host'`&&HOSTS=$(echo ${line#*=}|sed s/[[:space:]]//g)&&sudo clush -l root -w ${HOSTS} "sed -i 's/^ms_public_type[[:space:]]\+=.*/ms_public_type = async+posix/' /etc/ceph/ceph.conf"
 
 改public配置为rdma
line=`cat /etc/ceph/ceph.conf |grep -E 'mon_host'`&&HOSTS=$(echo ${line#*=}|sed s/[[:space:]]//g)&&sudo clush -l root -w ${HOSTS} "sed -i 's/^ms_public_type[[:space:]]\+=.*/ms_public_type = async+rdma/' /etc/ceph/ceph.conf"
 
改cluster配置为Posix
line=`cat /etc/ceph/ceph.conf |grep -E 'mon_host'`&&HOSTS=$(echo ${line#*=}|sed s/[[:space:]]//g)&&sudo clush -l root -w ${HOSTS} "sed -i 's/^ms_cluster_type[[:space:]]\+=.*/ms_cluster_type = async+posix/' /etc/ceph/ceph.conf"
 
改cluster配置为Rdma
 
 line=`cat /etc/ceph/ceph.conf |grep -E 'mon_host'`&&HOSTS=$(echo ${line#*=}|sed s/[[:space:]]//g)&&sudo clush -l root -w ${HOSTS} "sed -i 's/^ms_cluster_type[[:space:]]\+=.*/ms_cluster_type = async+rdma/' /etc/ceph/ceph.conf"
 
 
 
显示ceph
line=`cat /etc/ceph/ceph.conf |grep -E 'mon_host'`&&HOSTS=$(echo ${line#*=}|sed s/[[:space:]]//g)&&sudo clush -l root -w ${HOSTS} "sudo ps -aux|grep -E 'ceph-/*|dse'|grep -v 'grep';echo '=============================================================================='"
 
restart ceph
line=`cat /etc/ceph/ceph.conf |grep -E 'mon_host'`&&HOSTS=$(echo ${line#*=}|sed s/[[:space:]]//g)&&sudo clush -l root -w ${HOSTS} "sudo systemctl restart ceph.target"

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
远程连接机器并执行Shell命令的操作通常使用SSH协议。可以使用Go语言来实现这个功能。通过SSH协议,我们可以将命令发送到远程机器上执行,并获取返回结果。使用SSH客户端库,我们可以建立与远程机器的安全连接,并通过执行命令来进行远程操作。这样可以方便地在多个节点并行执行命令。 另外,还可以使用Bash over SSH来按顺序逐个执行命令。这种方法可以确保每个命令的执行顺序,避免并行执行时可能出现的问题。通过在SSH连接上执行一条命令,然后等待命令完成后再执行下一条命令,可以实现按顺序执行多个命令的需求。 总结来说,使用SSH协议可以实现远程连接机器并执行Shell命令的操作。可以使用Go语言实现远程命令执行,并可以选择并行执行或按顺序执行命令的方式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [如何使用Go语言实现远程执行命令](https://download.csdn.net/download/weixin_38576561/12874485)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【shellLinux Shell远程执行命令](https://blog.csdn.net/weixin_42319496/article/details/121414013)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值