linux 带环境变量 远程执行,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权限,但是有几处限制:

远程服务器禁止root用户登录

在远程服务器脚本里转换身份用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 [email protected] > /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 [email protected] < < remotessh

killall -9 java

cd /data/apache-tomcat-7.0.53/webapps/

exit

remotessh

远程执行的内容在"< < remotessh " 至" remotessh "之间

在远程机器上的操作就位于其中,注意的点:<< remotessh,ssh后直到遇到remotessh这样的内容结束,remotessh可以随便修改成其他形式。

在结束前,加exit退出远程节点 如果不想日志文件在本机出现可以修改配置

ssh [email protected] > /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

解决SSH远程执行命令找不到环境变量的问题

通过SSH执行远程主机的命令或脚本时,经常会出现找不到自定义环境变量的问题.但是,如果通过SSH登录远程主机,然后再执行相同的命令或脚本,那么此时执行又是成功的.两种相似的方法,得到的结果却截然不同, ...

[转帖]ssh 远程执行命令

ssh 远程执行命令 https://www.cnblogs.com/youngerger/p/9104144.html SSH 是 Linux 下进行远程连接的基本工具,但是如果仅仅用它来登录那可是 ...

利用scp 远程上传下载文件/文件夹和ssh远程执行命令

利用scp传输文件 1.从服务器下载文件scp username@servername:/path/filename /tmp/local_destination例如scp codinglog@192 ...

ssh远程执行命令使用明文密码

经过不懈的搜索终于找到ssh远程执行命令使用明文密码使用sshpass. 例子: sshpass -p "sequoiadb" ssh root@localhost "l ...

模拟ssh远程执行命令,粘包问题,基于socketserver实现并发的socket

06.27自我总结 1.模拟ssh远程执行命令 利用套接字编来进行远程执行命令 服务端 from socket import * import subprocess server = socket(A ...

网络编程之模拟ssh远程执行命令、粘包问题 、解决粘包问题

目录 模拟ssh远程执行命令 服务端 客户端 粘包问题 什么是粘包 TCP发送数据的四种情况 粘包的两种情况 解决粘包问题 struct模块 解决粘包问题 服务端 客户端 模拟ssh远程执行命令 服务 ...

ssh 远程执行命令 nohup 无效问题

昨夜1:00多准备睡觉了,突然一哥们咨询了我一个问题. 他A机器上远程执行B机器(ssh user@ip "command")上的脚本,B上的服务并没有起来. 看了下截图,脚本确实 ...

使用ssh远程执行命令批量导出数据库到本地

前天正在跟前端的同事调试功能.服务器开好,模拟的玩家登录好,就在倒计时.这时突然运营的同事跑过来说要统计几个服务器玩家的一些情况,也就是需要从几个服的数据库导出部分玩家的数据.好吧,我看了一下时间,1 ...

随机推荐

Excel 同时打开2个或多个独立窗口

首先win7版本点击[开始]菜单,在输入框里面输入"regedit.exe"打开注册表     然后定位找到该路径HKEY_CLASSES_ROOT \ Excel.Sheet.1 ...

让reddit/r/programming炸锅的一个帖子,还是挺有意思的

这是原帖 http://www.reddit.com/r/programming/comments/358tnp/five_programming_problems_every_software_en ...

javascript事件机制

① javascript绑定事件的方式 http://blog.iderzheng.com/dom-javascript-event-binding-comparison/ ② javascript事 ...

【c_prime_plus】第十七章笔记

抽象数据类型(ADT) 为类型的属性和可对类型执行的操作提供一个抽象的描述,这个米阿叔不受任何实现的约束,甚至不受任何特定编程语言的约束,这样一种正式的抽象描述被称为抽象数据类型. 开一个实现该ADT ...

FPGA基础知识了解

FPGA学习的一些误区 FPGA入门必看资源 FPGA百度百科 FPGA基础知识及其工作原理 高端设计工具为少有甚是没有硬件设计技术的工程师和科学家提供现场可编程门阵列(FPGA).无论你使用图形化设 ...

一起写框架-Ioc内核容器的实现-基础功能-ComponentScan(四)

功能说明 该步骤实现的功能包括: 1. 启动程序时,将@ComponentScan加载的类,创建对象并放在容器里面. 2. 通过ApplicatoinContext的getBean()方法获得容器里面 ...

[array] leetcode - 53. Maximum Subarray - Easy

leetcode - 53. Maximum Subarray - Easy descrition Find the contiguous subarray within an array (cont ...

Linux系统的RAID磁盘阵列

RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意. 磁盘阵列是由很多价格较便宜的磁盘,以硬件( ...

HBase describe table 参数说明

创建user表 > create 'dimensoft:user', 'info' 查看表结构 > describe 'dimensoft:user' DESCRIPTION 'dimen ...

树的最长链-POJ 1985 树的直径(最长链)+牛客小白月赛6-桃花

求树直径的方法在此转载一下大佬们的分析: 可以随便选择一个点开始进行bfs或者dfs,从而找到离该点最远的那个点(可以证明,离树上任意一点最远的点一定是树的某条直径的两端点之一:树的直径:树上的最长简 ...

你可能感兴趣的:(linux,带环境变量,远程执行)