ssh远程执⾏命令⽅法和Shell脚本实例
写这篇博客之前,我google了⼀堆相关⽂章,⼤都是说修改/etc/sudoers,然后NOPASSWD:指定的cmd,但是真⼼不管⽤,没有远程虚拟终端这个⽅法就是浮云,ubuntu10.04 server 亲测!!
ssh执⾏远程操作
ssh命令指定端口命令格式
复制代码代码如下:
ssh -p $port $user@$p 'cmd'
$port : ssh连接端⼝号
$user: ssh连接⽤户名
$ip:ssh连接的ip地址
cmd:远程服务器需要执⾏的操作
准备⼯作
基于公私钥认证或者⽤户名密码认证能确保登录到远程local2服务器(有点基本运维知识的⼈做这个事情都不是问题)
cmd如果是脚本,注意绝对路径问题(相对路径在远程执⾏时就是坑)
不⾜
这个命令可以满⾜我们⼤多数的需求,但是通常运维部署很多东西的时候需要root权限,但是有⼏处限制:
远程服务器local2禁⽌root⽤户登录
在远程服务器脚本⾥转换⾝份⽤expect需要send密码,这样不够安全
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虚拟出⼀个远程服务器的终端,在多台服务器同时部署时确实节约了不少时间啊!