shell 远程执行命令

经常需要远程到其他节点上执行一些shell命令,如果分别ssh到每台主机上再去执行很麻烦,因此能有个集中管理的方式就好了。所以介绍几种shell命令远程执行的方法。
前提条件:配置shell免密登录

 

执行单条命令

ssh user@remoteNode "df -h"

执行多条命令

ssh user@remoteNode "cd /home ; ls"  #双引号,必须有。如果不加双引号,第二个ls命令在本地执行;分号,两个命令之间用分号隔开

执行需要交互的命令

ssh user@remoteNode "sudo ls /root"
sudo: sorry, you must have a tty to run sudo
-------------------------------------------------------------------------------------------------
ssh user@remoteNode "top"
TERM environment variable not set.

这两条命令虽然提示的失败原因不同,但它们有一个共同点:都需要与用户交互(需要 TTY)。所以它们失败的原因也是相同的:
默认情况下,当你执行不带命令的 ssh 连接时,会为你分配一个 TTY。因为此时你应该是想要运行一个 shell 会话。
但是当你通过 ssh 在远程主机上执行命令时,并不会为这个远程会话分配 TTY。此时 ssh 会立即退出远程主机,所以需要交互的命令也随之结束。
好在我们可以通过 -t 参数显式的告诉 ssh,我们需要一个 TTY 远程 shell 进行交互!
添加 -t 参数后,ssh 会保持登录状态,直到你退出需要交互的命令。

ssh user@remoteNode "sudo ls /root"
sudo: sorry, you must have a tty to run sudo   #必须分配一个终端
ssh -t user@remoteNode "sudo ls /root"
[sudo] password for user:        #加-t选项后成功,输入用户密码

2.脚本方式:

2.1执行本地脚本

ssh user@remoteNode < test.sh

2.2向脚本传递参数

ssh user@remoteNode 'bash  -s' < test.sh age

2.3执行远程服务器上的脚本

ssh user@remoteNode "/tmp/test.sh"    #写脚本的绝对路径

2.4执行远程服务器上的脚本并带参数

ssh user@remoteNode "/tmp/test.sh arguement"
  • 示例2:
    初始化系统环境。在test.sh脚本中编写:关闭selinux命令、关闭iptables、修改hosts文件、安装jdk环境等。
#!/bin/bash  

#变量定义  
ip_array=("192.168.1.1" "192.168.1.2" "192.168.1.3")  
user="tester"  
remote_cmd="/home/test.sh"  


for ip in ${ip_array[@]}  
do  
    ssh -t -p $port $user@$ip "remote_cmd"  
done  

命令使用方法

ssh [-p port]  [user@]hostname [command]

port : ssh连接端口号
user: ssh连接用户名
ip:ssh连接的ip地址
cmd:远程服务器需要执行的操作
其他选项:
-t:强制分配一个伪终端,可以在远程机器上执行任何全屏幕(screen-based)程序,所以非常有用,例如菜单服务。双t选项(-tt)的意思是强制分配终端,即使ssh没有本地终端。
-T:禁止分配伪终端。
-q:静默模式,忽略所有警告和诊断信息。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值