zoukankan      html  css  js  c++  java
  • ssh远程执行命令方法和Shell脚本实例

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

    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 
  • 相关阅读:
    Hadoop 文件系统命令行基础
    Mac bash 远程连接阿里云服务器
    Master in Vocab -- Day Six
    Master in Vocab -- Day Five
    Master in Vocab -- Day Four
    Master in Vocab -- Day Three
    mybatis学习一
    mysql事务,视图,权限管理,索引,存储引擎(胖胖老师)
    SpringAOP
    Spring事务
  • 原文地址:https://www.cnblogs.com/exmyth/p/13163047.html
Copyright © 2011-2022 走看看