2017年6月16日 星期五

SSH對遠端下含有檔案重導向的指令

雖說ssh很方便可以直接對遠端的機器下指令,但如果指令command裡面含有檔案重導的符號,像是 >, <, | 等等符號,那這樣就無法用下面的方式下指令:
  • ssh remoteIP command
這種狀況的解法就是,用'(command)'將指令給括號起來 :
  • ssh remoteIP '(command)'

例如說,想要知道遠端機器192.168.9.2的CPU型號為何,可以用下面指令
  • ssh 192.168.9.2 '(cat /proc/cpuinfo | grep "^model name" | uniq)'
  • for ip in 192.168.9.{2..17}; do echo $ip; ssh $ip '(cat /proc/cpuinfo | grep "^model name" | uniq)'; echo ""; done
上面第二個指令可以一次檢查16台機器的CPU型號!
此文章參考了《Executing commands remotely with ssh and output redirection》,裡面提供了四個例子:
  1. ssh user@ssh-server.com '( cd /tmp/ && touch ssh_file.txt )'
  2. ssh user@ssh-server.com '( cat /etc/passwd )' > /tmp/passwd
  3. ssh user@ssh-server.com '( cat ~/myscript.sh )' 
  4. ssh user@ssh-server.com '( cp /var/log/auth.log /tmp/; cd /tmp/ && tar -jcvf - auth.log )' > /tmp/auth.tar.bz2
意思分別是:
  1. 在遠端/tmp/下建立一個叫做ssh_file.txt的檔案
  2. 將遠端的/etc/passwd檔案存放到本機端的/tmp/passwd裡面
  3. 印出遠端機器下面~/myscript.sh這個檔案
  4. 將遠端的/var/log/auth.log檔案壓縮成bzip2格式放在本機端 /tmp/auth.tar.gz2裡面
_EOF_

沒有留言:

張貼留言