300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 『ssh』使用shell远程执行命令

『ssh』使用shell远程执行命令

时间:2018-12-07 12:17:16

相关推荐

『ssh』使用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:静默模式,忽略所有警告和诊断信息。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。