本文介绍通过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
2)如何通过SSH在远程Linux系统上运行多个命令
以下示例允许用户在远程Linux系统上通过ssh一次运行多个命令。
在远程Linux系统上同时运行uptime命令和free命令:
$ ssh daygeek@CentOS6.2daygeek.com "uptime && free -m"
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"
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
6)如何将输出从远程系统保存到本地系统
以下示例允许用户通过ssh在Linux系统上远程执行top命令,并将输出保存到本地系统:
$ ssh daygeek@CentOS7.2daygeek.com "top -bc | head -n 35" > /tmp/top-output.txt
或者,可以使用以下格式在远程系统上运行多个命令:
$ ssh daygeek@CentOS7.2daygeek.com << EOF
hostnamectl
free -m
grep daygeek /etc/passwd
EOF
上面命令的输出:
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
或者,可以使用管道,如果你认为输出效果不好,请进行一些更改以使其更美观:
$ 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
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
9)如何使用sshpass命令添加密码
如果每次都无法输入密码,我建议你根据需要使用以下任何一种方法。
如果你打算频繁执行此类活动,建议你设置无密码身份验证,因为这是一种标准且永久的解决方案。参考在Linux系统中运行没有sudo密码的特定命令。
如果你每月仅执行几次这些任务,我建议你使用“sshpass”实用程序。
只需使用“ -p”选项提供密码作为参数即可:
$ sshpass -p 'Your_Password_Here' ssh -p 2200 daygeek@192.168.1.12 ip a
相关主题