ssh 远程执行命令简介

转自:http://blog.csdn.net/shangzhiliang_2008/article/details/8602756

在写这篇博客之前,我google了一堆相关文章,大都是说修改/etc/sudoers,然后NOPASSWD:指定的cmd,但是真心不管用,没有远程虚拟终端这个方法就是浮云,ubuntu10.04 server 亲测!! 

ssh执行远程操作

命令格式

[html] view plain copy

  1. ssh -p $port $user@$p 'cmd'  
  2.   
  3. $port : ssh连接端口号  
  4. $user: ssh连接用户名  
  5. $ip:ssh连接的ip地址  
  6. cmd:远程服务器需要执行的操作  

 

准备工作

  • 基于公私钥认证或者用户名密码认证能确保登录到远程local2服务器(有点基本运维知识的人做这个事情都不是问题)
  • cmd如果是脚本,注意绝对路径问题(相对路径在远程执行时就是坑)

 

不足

这个命令可以满足我们大多数的需求,但是通常运维部署很多东西的时候需要root权限,但是有几处限制:

  • 远程服务器local2禁止root用户登录
  • 在远程服务器脚本里转换身份用expect需要send密码,这样不够安全

 

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

 

ssh的-t参数

[html] view plain copy

  1. -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] view plain copy

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

 

示例脚本

[html] view plain copy

  1. #!/bin/bash  
  2.   
  3. #变量定义  
  4. ip_array=("192.168.1.1" "192.168.1.2" "192.168.1.3")  
  5. user="test1"  
  6. remote_cmd="/home/test/1.sh"  
  7.   
  8. #本地通过ssh执行远程服务器的脚本  
  9. for ip in ${ip_array[*]}  
  10. do  
  11.     if [ $ip = "192.168.1.1" ]; then  
  12.         port="7777"  
  13.     else  
  14.         port="22"  
  15.     fi  
  16.     ssh -t -p $port $user@$ip "remote_cmd"  
  17. done  

 

后记

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

转载于:https://my.oschina.net/sniperLi/blog/1538916

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值