zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    JS第二天
    ES6
    Asp.net Core Web Mvc项目添加Jwt验证
    .Net Core 平台下创建WinForm窗体SignalR客户端
    .Net Core平台下实现SignalR客户端和服务端
    .Net Framework 平台下创建WinForm窗体SignalR客户端
    在.Net Framework平台下WPF实现SignalR客户端
    .Net Framework框架下实现SignalR客户端和服务端
    信息系统项目管理师10大管理47个过程域输入输出工具(项目人力资源管理)
    信息系统项目管理师10大管理47个过程域输入输出工具(项目质量管理)
  • 原文地址:https://www.cnblogs.com/ybyqjzl/p/10450086.html
Copyright © 2011-2022 走看看