云网牛站
所在位置:首页 > Linux命令 > 通过SSH在远程Linux操作系统上执行命令的方法

通过SSH在远程Linux操作系统上执行命令的方法

2019-09-30 10:03:50作者:高风科稿源:云网牛站

本文介绍通过SSH在远程Linux操作系统上执行命令的方法,包括运行多个命令,可以从本地系统执行操作,而不必登录到远程系统,这可以节省到很多的时间,SSH允许你在不登录计算机的情况下在远程计算机上运行命令。通用为:$ ssh [User_Name]@[Rremote_Host_Name or IP] [Command or Script]。

 

1)如何通过SSH在远程Linux系统上运行命令

以下示例允许用户在远程Linux机器上通过ssh运行df命令:

$ ssh daygeek@CentOS7.2daygeek.com df -h

通过SSH在远程Linux操作系统上执行命令的方法

 

2)如何通过SSH在远程Linux系统上运行多个命令

以下示例允许用户在远程Linux系统上通过ssh一次运行多个命令。

在远程Linux系统上同时运行uptime命令和free命令:

$ ssh daygeek@CentOS6.2daygeek.com "uptime && free -m"

通过SSH在远程Linux操作系统上执行命令的方法

 

3)如何通过SSH在远程Linux系统上使用sudo特权运行命令

以下示例允许用户通过ssh在远程Linux系统上以sudo特权运行fdisk命令。

普通用户不允许执行系统二进制(/usr/sbin/)目录下的可用命令,用户需要root特权才能运行它。

因此,要在Linux系统上运行fdisk命令,需要root特权。参考在Ubuntu系统上为用户授予和删除sudo权限的方法

which命令返回给定命令的可执行文件的完整路径:

$ which fdisk

/usr/sbin/fdisk

$ ssh -t daygeek@CentOS7.2daygeek.com "sudo fdisk -l"

通过SSH在远程Linux操作系统上执行命令的方法

 

4)如何通过SSH在远程Linux系统上使用sudo特权运行Service命令

以下示例允许用户通过ssh在远程Linux系统上以sudo特权运行service命令:

$ ssh -t daygeek@CentOS7.2daygeek.com "sudo systemctl restart httpd"

[sudo] password for daygeek: 

Connection to centos7.2daygeek.com closed.

 

5)如何使用非标准端口通过SSH在远程Linux系统上运行命令

以下示例允许用户在具有非标准端口的远程Linux计算机上通过ssh运行hostnamectl命令:

$ ssh -p 2200 daygeek@Ubuntu18.2daygeek.com hostnamectl

通过SSH在远程Linux操作系统上执行命令的方法

 

6)如何将输出从远程系统保存到本地系统

以下示例允许用户通过ssh在Linux系统上远程执行top命令,并将输出保存到本地系统:

$ ssh daygeek@CentOS7.2daygeek.com "top -bc | head -n 35" > /tmp/top-output.txt

通过SSH在远程Linux操作系统上执行命令的方法

或者,可以使用以下格式在远程系统上运行多个命令:

$ ssh daygeek@CentOS7.2daygeek.com << EOF

hostnamectl

free -m

grep daygeek /etc/passwd

EOF

上面命令的输出:

通过SSH在远程Linux操作系统上执行命令的方法

 

7)如何在远程系统上执行本地Bash脚本

以下示例允许用户在远程Linux计算机上通过ssh运行本地bash脚本“remote-test.sh”。

创建一个shell脚本并执行它。

$ vi /tmp/remote-test.sh

#!/bin/bash

#Name: remote-test.sh

#--------------------

uptime

free -m

df -h

uname -a

hostnamectl

上面命令的输出:

$ ssh daygeek@CentOS7.2daygeek.com 'bash -s' < /tmp/remote-test.sh

通过SSH在远程Linux操作系统上执行命令的方法

或者,可以使用管道,如果你认为输出效果不好,请进行一些更改以使其更美观:

$ vi /tmp/remote-test-1.sh

#!/bin/bash

#Name: remote-test.sh

echo "---------System Uptime----------------------------------"

uptime

echo -e "\n"

echo "---------Memory Usage----------------------------------"

free -m

echo -e "\n"

echo "---------Disk Usage----------------------------------"

df -h

echo -e "\n"

echo "---------Kernel Version----------------------------------"

uname -a

echo -e "\n"

echo "---------HostName Info----------------------------------"

hostnamectl

echo "----------------------------------"

上面脚本的输出:

$ cat /tmp/remote-test.sh  | ssh daygeek@CentOS7.2daygeek.com

通过SSH在远程Linux操作系统上执行命令的方法

 

8)如何在多个远程系统上同时运行多个命令

以下bash脚本允许用户在多个远程系统上同时运行多个命令,使用简单的for循环来实现它。

为此,可以尝试使用PSSH命令或ClusterShell命令或DSH命令:

$ vi /tmp/multiple-host.sh

for host in CentOS7.2daygeek.com CentOS6.2daygeek.com

do

ssh daygeek@${host} "uname -a;uptime;date;w"

done

上面脚本的输出:

$ sh multiple-host.sh

通过SSH在远程Linux操作系统上执行命令的方法

 

9)如何使用sshpass命令添加密码

如果每次都无法输入密码,我建议你根据需要使用以下任何一种方法。

如果你打算频繁执行此类活动,建议你设置无密码身份验证,因为这是一种标准且永久的解决方案。参考在Linux系统中运行没有sudo密码的特定命令

如果你每月仅执行几次这些任务,我建议你使用“sshpass”实用程序。

只需使用“ -p”选项提供密码作为参数即可:

$ sshpass -p 'Your_Password_Here' ssh -p 2200 daygeek@192.168.1.12 ip a

通过SSH在远程Linux操作系统上执行命令的方法

 

相关主题

通过SSH使用Rsync传输文件,复制和同步文件及目录

Linux命令子频道
精选文章
热门文章