zoukankan      html  css  js  c++  java
  • ssh 远程执行命令简介

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

    ssh执行远程操作

    命令格式

    [html] view plain
    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
    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
    1. ssh -t -p $port $user@$ip  'cmd'  

    示例脚本

    [html] view plain
    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虚拟出一个远程服务器的终端,在多台服务器同时部署时确实节约了不少时间啊!

  • 相关阅读:
    java类加载全过程
    pyAggr3g470r 3.6 发布,新闻聚合器
    fourinone分布式协调设计解析
    修改openJDK7的javac,使得java支持单引号字符串
    SabreDAV 1.8.0 发布,集成 WebDAV 系统
    openSUSE 12.3 里程碑 1 发布
    GroupOffice 4.0.123 发布
    nagios总结与基本配置模板
    Zorin OS 6.1 发布,基于Ubuntu的Linux
    Ehcache 2.6.2 发布,Java 缓存框架
  • 原文地址:https://www.cnblogs.com/hllnj2008/p/5315051.html
Copyright © 2011-2022 走看看