知识屋:更实用的电脑技术知识网站
所在位置:首页 > 操作系统 > linux

ssh执行远程服务器需要sudo提权的脚本

发布时间:2014-09-05 15:16:56作者:知识屋

ssh执行远程服务器需要sudo提权的脚本
 
前言
运维是件很神奇的工作,牛逼的运维很轻松可以搞定很复杂的任务,sb的运维天天时间都耗上
可能也解决不了问题(ps:因为他把时间都花在了可以重复执行的事情上)
  www.zhishiwu.com  
在写这篇博客之前,我google了一堆相关文章,大都是说修改/etc/sudoers,然后NOPASSWD:
指定的cmd,但是真心不管用,没有远程虚拟终端这个方法就是浮云,ubuntu10.04 server 亲测!!
 
ssh执行远程操作  www.zhishiwu.com  
命令格式
[html] 
ssh -p $port $user@$p 'cmd'  
  
$port : ssh连接端口号  
$user: ssh连接用户名  
$ip:ssh连接的ip地址  
cmd:远程服务器需要执行的操作  
 
准备工作
基于公私钥认证或者用户名密码认证能确保登录到远程local2服务器(有点基本运维知识的人
做这个事情都不是问题)
cmd如果是脚本,注意绝对路径问题(相对路径在远程执行时就是坑)
 
不足
这个命令可以满足我们大多数的需求,但是通常运维部署很多东西的时候需要root权限,
但是有几处限制:
远程服务器local2禁止root用户登录
在远程服务器脚本里转换身份用expect需要send密码,这样不够安全
 
执行远程服务器需要sudo权限的脚本
 
ssh的-t参数
[html] 
-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终端,加上这个参数我们就可以在远程
服务器的虚拟终端上输入自己的提权密码了,非常安全
 
命令格式
[html] 
ssh -t -p $port $user@$ip  'cmd'  
 
示例脚本
[html] 
#!/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执行远程服务器的脚本    www.zhishiwu.com  
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虚拟出一个远程服务器的终端,
在多台服务器同时部署时确实节约了不少时间啊!
 
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜