• SSH远程执行命令环境变量问题


    SSH命令格式
    usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
               [-D [bind_address:]port] [-e escape_char] [-F configfile]
               [-I pkcs11] [-i identity_file]
               [-L [bind_address:]port:host:hostport]
               [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
               [-R [bind_address:]port:host:hostport] [-S ctl_path]
               [-W host:port] [-w local_tun[:remote_tun]]
               [user@]hostname [command]

    主要参数说明

    -l   指定登入用户
    -p 设置端口号
    -f  后台运行,并推荐加上 -n 参数
    -n 将标准输入重定向到 /dev/null,防止读取标准输入。如果在后台运行ssh的话(-f选项),就需要这个选项。
    -N 不执行远程命令,只做端口转发
    -q 安静模式,忽略一切对话和错误提示
    -T 禁用伪终端配置
    -t (tty)为远程系统上的ssh进程分配一个伪tty(终端)。如果没有使用这个选项,当你在远程系统上运行某条命令的时候,ssh不会为该进程分配tty(终端)。相反,ssh将会把远端进程的标准输入和标准输出附加到ssh会话上去,这通常就是你所希望的(但并非总是如此)。这个选项将强制ssh在远端系统上分配tty,这样那些需要tty的程序就能够正常运行。
    -v verbose)显示与连接和传送有关的调试信息。如果命令运行不太正常的话,这个选项就会非常有用。

    ssh控制远程主机,远程执行命令步骤
    第一步,设置ssh免认证,免认证就是不用密码认证就可以直接登录,这在写脚本服务器控制时特别有用。

    每二步,就是到远端服务器上去执行命令

    准备工作
    基于公私钥认证(可参考:Linux配置SSH密钥登录详解及客户端测试使用无密码登录)或者用户名密码认证(可参考:SSH使用expect自动输入密码、命令实现非交互式密码授权)能确保登录到远程服务器
    cmd如果是脚本,注意绝对路径问题(相对路径在远程执行时就是坑)

    基于公私钥认证远程登录可能存在的不足

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

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

    ssh 执行远程命令格式

    ssh [options] [user@]host [command]

    其中,host为想要连接到的OpenSSH服务器(远程系统)的名称,它是惟一的必需参数。host可以是某个本地系统的名称,也可以是因特网上某个系统的FQDN(参见术语表)或者是一个IP地址。命令ssh host登录到远程系统host,使用的用户名与正在本地系统上使用的用户名完全相同。如果希望登录的用户名与正在本地系统上使用的用户名不同,那么就应该包含user@。根据服务器设置的不同,可能还需要提供口令。

     
    ssh远程执行命令
    如果没有提供command参数,ssh就会让你登录到host上去。远程系统显示一个shell提示符,然后就能够在host上运行命令。命令exit将会关闭与host的连接,并返回到本地系统的提示符。
     
    1. ssh远程执行简单的命令
    [root@web01 data]# ls /data/
    10.0.0.7  web01
    [root@web02 data]# ls /data/
    10.0.0.8  web02
    
    //ssh远程执行一个命令
    [root@web01 data]# ssh 10.0.0.8 ls /data
    10.0.0.8
    web02
    
    //ssh远程执行两个命令,不加引号
    [root@web01 data]# ssh 10.0.0.8 ls /data;ls  //没有加双引号,第二个ls直接在本地的目前所在目录执行
    10.0.0.8
    web02
    10.0.0.7  web01
    
    //ssh远程执行两个命令,加引号(无变量,单双引号都行)
    [root@web01 data]# ssh 10.0.0.8 'ls /data;ls'
    10.0.0.8
    web02
    anaconda-ks.cfg
    install.log
    install.log.syslog
    nginx.sh

    1. 如果想在远程机器上连续执行多条命令,可以用单引号或者双引号将这些命令括起来。

    2. 如果不加单引号或者双引号,第二个ls命令在本地执行。

    • 例如 ssh user@node cd /local ls 则 ls 只会执行 cd /local 命令,ls命令在本地执行,加了双引号或者单引号,则被括起来的命令被当做ssh命令的一个参数,所以会在远程连续执行。

    3. 分号,两个命令之间用分号隔开

     2. 通过shell脚本的方式远程执行命令
    示例一说明:
    [root@web01 data]# cat /server/scripts/ssh.sh #!/bin/bash ssh root@10.0.0.8 > /dev/null 2>
    &1 << eeooff cd /home touch abcdefg.txt exit eeooff echo done! [root@web01 data]# sh /server/scripts/ssh.sh done! [root@web01 data]# ssh 10.0.0.8 "ls /home" abcdefg.txt oldboy web 远程执行的内容在“<< eeooff ” 至“ eeooff ”之间,在远程机器上的操作就位于其中,注意的点: 1. << eeooff,ssh后直到遇到eeooff这样的内容结束,eeooff可以随便修改成其他形式。 2. 重定向目的在于不显示远程的输出了 3. 在结束前,加exit退出远程节点 链接:http://www.cnblogs.com/ilfmonday/p/ShellRemote.html
    示例二说明: #!/bin/bash ssh root@192.168.0.23 < < remotessh killall -9 java cd /data/apache-tomcat-7.0.53/webapps/ exit remotessh 远程执行的内容在"< < remotessh " 至" remotessh "之间
    在远程机器上的操作就位于其中,注意的点:<< remotessh,ssh后直到遇到remotessh这样的内容结束,remotessh可以随便修改成其他形式。
    在结束前,加exit退出远程节点 如果不想日志文件在本机出现可以修改配置 ssh root@192.168.0.23
    > /dev/null 2>&1 < < remotessh
    https://blog.csdn.net/sn3009/article/details/52779642

     3. 查看远程服务器的CPU信息

     https://www.cnblogs.com/softidea/p/6855045.html

     
     
     
     
     
     
     
     
     
     
     
     
     
     

    example:

    find ./ ! -path "./output/*" ! -path "./output1/*" -type f | xargs grep ""

    https://blog.51cto.com/xoyabc/2108052

  • 相关阅读:
    volley框架使用
    Insert Interval
    candy(贪心)
    Best Time to Buy and Sell Stock
    Best Time to Buy and Sell Stock III
    distinct subsequences
    edit distance(编辑距离,两个字符串之间相似性的问题)
    trapping rain water
    word break II(单词切分)
    sudoku solver(数独)
  • 原文地址:https://www.cnblogs.com/ybyqjzl/p/10450086.html
Copyright © 2020-2023  润新知