ssh远程执行命令并自动退出

ssh命令格式如下:

[plain]view plaincopy

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,防止读取标准输入

-N不执行远程命令,只做端口转发

-q安静模式,忽略一切对话和错误提示

-T禁用伪终端配置

ssh 执行远程命令格式:

[plain]view plaincopy

ssh [options][remote host][command]

假设远程服务器IP是192.168.110.34

例:查看远程服务器的cpu信息

ssh -l www-online 192.168.110.34 "cat /proc/cpuinfo"

[plain]view plaincopy

www-online@onlinedev01:~$ ssh -l www-online 192.168.110.34 "cat /proc/cpuinfo"

www-online@192.168.110.34's password:

processor       : 0

vendor_id       : GenuineIntel

cpu family      : 6

model           : 26

model name      : Intel(R) Xeon(R) CPU           E5506  @ 2.13GHz

stepping        : 5

cpu MHz         : 2128.000

cache size      : 4096 KB

fpu             : yes

fpu_exception   : yes

cpuid level     : 11

wp              : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology tsc_reliable nonstop_tsc aperfmperf pni ssse3 cx16 sse4_1 sse4_2 popcnt hypervisor lahf_lm

bogomips        : 4256.00

clflush size    : 64

cache_alignment : 64

address sizes   : 40 bits physical, 48 bits virtual

power management:

processor       : 1

vendor_id       : GenuineIntel

cpu family      : 6

model           : 26

model name      : Intel(R) Xeon(R) CPU           E5506  @ 2.13GHz

stepping        : 5

cpu MHz         : 2128.000

cache size      : 4096 KB

fpu             : yes

fpu_exception   : yes

cpuid level     : 11

wp              : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology tsc_reliable nonstop_tsc aperfmperf pni ssse3 cx16 sse4_1 sse4_2 popcnt hypervisor lahf_lm

bogomips        : 4260.80

clflush size    : 64

cache_alignment : 64

address sizes   : 40 bits physical, 48 bits virtual

power management:

例:执行远程服务器的sh文件

首先在远程服务器的/home/www-online/下创建一个uptimelog.sh脚本

[plain]view plaincopy

#!/bin/bash

uptime >> 'uptime.log'

exit 0

使用chmod增加可执行权限

[plain]view plaincopy

chmod u+x uptimelog.sh

在本地调用远程的uptimelog.sh

[plain]view plaincopy

ssh -l www-online 192.168.110.34 "/home/www-online/uptimelog.sh"

执行完成后,在远程服务器的/home/www-online/中会看到uptime.log文件,显示uptime内容

[plain]view plaincopy

www-online@nmgwww34:~$ tail -f uptime.log

21:07:34 up 288 days,  8:07,  1 user,  load average: 0.05, 0.19, 0.31

例:执行远程后台运行sh

首先把uptimelog.sh修改一下,修改成循环执行的命令。作用是每一秒把uptime写入uptime.log

[plain]view plaincopy

#!/bin/bash

while :

do

uptime >> 'uptime.log'

sleep 1

done

exit 0

我们需要这个sh在远程服务器以后台方式运行,命令如下:

ssh -l www-online 192.168.110.34 "/home/www-online/uptimelog.sh &"

[plain]view plaincopy

www-online@onlinedev01:~$ ssh -l www-online 192.168.110.34 "/home/www-online/uptimelog.sh &"

www-online@192.168.110.34's password:

输入密码后,发现一直停住了,而在远程服务器可以看到,程序已经以后台方式运行了。

[plain]view plaincopy

www-online@nmgwww34:~$ ps aux|grep uptimelog.sh

1007     20791  0.0  0.0  10720  1432 ?        S    21:25   0:00 /bin/bash /home/www-online/uptimelog.sh

原因是因为uptimelog.sh一直在运行,并没有任何返回,因此调用方一直处于等待状态。

我们先kill掉远程服务器的uptimelog.sh进程,然后对应此问题进行解决。

ssh 调用远程命令后不能自动退出解决方法

可以将标准输出与标准错误输出重定向到/dev/null,这样就不会一直处于等待状态。

ssh -l www-online 192.168.110.34 "/home/www-online/uptimelog.sh > /dev/null 2>&1 &"

[plain]view plaincopy

www-online@onlinedev01:~$ ssh -l www-online 192.168.110.34 "/home/www-online/uptimelog.sh > /dev/null 2>&1 &"

www-online@192.168.110.34's password:

www-online@onlinedev01:~$

但这个ssh进程会一直运行在后台,浪费资源,因此我们需要自动清理这些进程。

实际上,想ssh退出,我们可以在ssh执行完成后kill掉ssh这个进程来实现。

首先,创建一个sh执行ssh的命令,这里需要用到ssh的-f与-n参数,因为我们需要ssh也以后台方式运行,这样才可以获取到进程号进行kill操作。

创建ssh_uptimelog.sh,脚本如下

[plain]view plaincopy

#!/bin/bash

ssh -f -n -l www-online 192.168.110.34 "/home/www-online/uptimelog.sh &" # 后台运行ssh

pid=$(ps aux | grep "ssh -f -n -l www-online 192.168.110.34 /home/www-online/uptimelog.sh" | awk '{print $2}' | sort -n | head -n 1) # 获取进程号

echo "ssh command is running, pid:${pid}"

sleep 3 && kill ${pid} && echo "ssh command is complete" # 延迟3秒后执行kill命令,关闭ssh进程,延迟时间可以根据调用的命令不同调整

exit 0

可以看到,3秒后会自动退出

[plain]view plaincopy

www-online@onlinedev01:~$ ./ssh_uptimelog.sh

www-online@192.168.110.34's password:

ssh command is running, pid:10141

ssh command is complete

www-online@onlinedev01:~$

然后查看远程服务器,可以见到uptimelog.sh 在后台正常执行。

[plain]view plaincopy

www-online@nmgwww34:~$ ps aux|grep uptime

1007     28061  0.1  0.0  10720  1432 ?        S    22:05   0:00 /bin/bash /home/www-online/uptimelog.sh

查看uptime.log,每秒都有uptime数据写入。

[plain]view plaincopy

www-online@nmgwww34:~$ tail -f uptime.log

22:05:44 up 288 days,  9:05,  1 user,  load average: 0.01, 0.03, 0.08

22:05:45 up 288 days,  9:05,  1 user,  load average: 0.01, 0.03, 0.08

22:05:46 up 288 days,  9:05,  1 user,  load average: 0.01, 0.03, 0.08

22:05:47 up 288 days,  9:05,  1 user,  load average: 0.01, 0.03, 0.08

22:05:48 up 288 days,  9:05,  1 user,  load average: 0.01, 0.03, 0.08

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 1.Linux下如何用命令查看实时日志(完整命令) tail -f 路径.log查看前多少行 tai-200f 路...
    qianyewhy阅读 2,245评论 0 11
  • 背景: 阅读新闻 11G ASM磁盘组不能自动MOUNT处理 [日期:2016-01-12] 来源:Linux社区...
    yanglei3849阅读 3,813评论 0 2
  • 1.Pod Pod是k8s的最基本的操作单元,包含一个或多个紧密相关的容器,类似于豌豆荚的概念。一个Pod可以被一...
    jony456123阅读 7,396评论 0 5
  • 一杯清茶,三两知己 几碗浊酒,独会红颜 曾经的我们不会孤独,只因为有彼此的陪伴 曾经的我们不会哭泣,只因为有彼此的...
    孑影_CURTAIN阅读 373评论 0 2
  • 看了今天的晨读文后,想到了于娟的那本书《此生未完成》。她说:“名利权情,没有一样是不辛苦的,也没有一样是可以带走的...
    李相逢阅读 209评论 0 0