ssh命令格式以下:api
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 指定登入用戶
bash
-p 設置端口號
服務器
-f 後臺運行,並推薦加上 -n 參數
ssh
-n 將標準輸入重定向到 /dev/null,防止讀取標準輸入
ide
-N 不執行遠程命令,只作端口轉發
ui
-q 安靜模式,忽略一切對話和錯誤提示
spa
-T 禁用僞終端配置
code
ssh 執行遠程命令格式:
blog
ssh [options][remote host][command]
例:查看遠程服務器的cpu信息進程
ssh -l www-online 192.168.110.34 "cat /proc/cpuinfo"
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:
首先在遠程服務器的/home/www-online/下建立一個uptimelog.sh腳本
#!/bin/bash uptime >> 'uptime.log' exit 0使用chmod增長可執行權限
chmod u+x uptimelog.sh在本地調用遠程的uptimelog.sh
ssh -l www-online 192.168.110.34 "/home/www-online/uptimelog.sh"執行完成後,在遠程服務器的/home/www-online/中會看到uptime.log文件,顯示uptime內容
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
首先把uptimelog.sh修改一下,修改爲循環執行的命令。做用是每一秒把uptime寫入uptime.log
#!/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 &"
www-online@onlinedev01:~$ ssh -l www-online 192.168.110.34 "/home/www-online/uptimelog.sh &" www-online@192.168.110.34's password:輸入密碼後,發現一直停住了,而在遠程服務器能夠看到,程序已經之後臺方式運行了。
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 &"
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,腳本以下
#!/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秒後會自動退出
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 在後臺正常執行。
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數據寫入。
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