在远程 Linux / UNIX 主机上运行命令
您希望在远程 Linux、FreeBSD、Solaris、UNIX 主机上执行或运行命令并在本地显示结果。获得结果后,本地脚本或程序可以使用它。以下是在远程服务器上运行命令的一些示例对开发人员和系统管理员很有用:
- 文件系统和磁盘信息
- 获取用户信息
- 查找所有正在运行的进程
- 查看某项服务是否正在运行等等
- 您可以使用 ssh 来实现此目的。但是请注意,远程系统必须运行 OpenSSH 或您选择的任何其他 SSH 服务器。
在远程 Linux 或 Unix 主机上运行命令的语法
语法如下:
其中,
$ ssh {USER-NAME}@{REMOTE-HOST} command1
$ ssh [USER-NAME]@[REMOTE-HOST] command or script
$ ssh [USER-NAME]@[REMOTE-HOST] -- command -arg1 -arg2
# Rum multiple commands #
$ ssh [USER-NAME]@[REMOTE-HOST] -- "command1 && command2"
$ ssh [USER-NAME]@[REMOTE-HOST] -- command1 -arg1 >/path/to/local.output.txt
# Want to run remote command over ssh with sudo? #
$ ssh -t [USER-NAME]@[REMOTE-HOST] -- sudo command1 -arg1 arg2
- ssh:ssh(或其他 SSH 客户端)是用于登录远程计算机并在远程计算机上执行命令的程序。
- USER-NAME:远程主机用户名。
- REMOTE-HOST:远程主机 ip 地址或主机名,例如 fbsd.example.com。
- command or script:在远程主机上执行命令或 shell 脚本,而不是登录 shell。
- --:双破折号“ --”表示“命令行标志的结束”。它告诉 ssh 不要尝试解析命令行选项后面的内容。有关更多信息,请参阅“ SSH Shell 命令中的 ‐‐(双破折号)是什么意思? ”。
- -t:-t通过 ssh 使用 sudo 命令时需要的选项。否则,您将在 Linux 和 Unix消息中收到 sudo:抱歉,您必须有一个 tty 才能运行 sudo 错误。
- >/path/to/local.output.txt:在远程主机上执行命令并将输出存储到此文件。
在远程主机上运行命令的示例
使用df 命令或ncdu 命令或pydf 命令或duf 命令从名为 www1.example.com 的服务器获取磁盘信息:使用 netstat 命令或 ss 命令列出远程 Linux 主机上打开的端口:在 FreeBSD 上,您可以使用 sockstat 命令列出或显示打开的端口。例如:
根据安全策略,您可能需要使用 sudo 命令运行 ssh 命令
$ ssh vivek@www1.example.com df -h
$ ssh vivek@192.168.2.17 -- df -h
$ ssh vivek@www1.example.com netstat -vatn
$ ssh vivek@192.168.2.17 -- sockstat -4
$ ssh -t vivek@192.168.2.17 -- sudo sockstat -4
重新启动远程主机
想要重启远程 Linux 或 Unix 服务器?请尝试以下重启命令
$ ssh root@www1.example.com reboot
:
如果无法以 root 用户身份登录,请使用 sudo 命令:
$ ssh -t vivek@www1.example.com -- sudo /sbin/reboot
$ ssh root@www1.example.com '/etc/init.d/mysql restart'
: 或者使用 systemctl 命令:
$ ssh -t vivek@www1.example.com -- sudo systemctl restart mysqld
获取 Linux 内存信息并将结果(输出)存储到本地名为 /tmp/memory.status.txt 的文件中:
然后,您可以使用标准命令(如cat、more、bat 命令或 less 命令)查看该文件,如下所示:
您还可以运行多个命令或使用管道,以下命令以“可用内存 = 已使用 + 空闲内存”的格式显示内存:
$ ssh vivek@www1.example.com -- 'free -m' > /tmp/memory.status.txt
$ cat /tmp/memory.status.txt
ssh vivek@debian.example.com -- free -m | grep "Mem:" | awk '{ print "Total memory (used+free): " $3 " + " $4 " = " $2 }'
来自远程 Linux 服务器的示例输出显示在本地 macOS Unix 计算机上:
Total memory (used+free): 2279 + 25446 = 32110
有关详细信息,请参阅如何使用基于公钥的身份验证配置 ssh 以实现无密码登录。另请参阅示例 shell 脚本,以从多个 Linux 服务器获取正常运行时间、磁盘使用情况、CPU 使用情况、RAM 使用情况、系统负载等,并以 html 格式在单个服务器上输出这些信息。
总结
我解释了如何使用 ssh 命令在远程 Linux 或 Unix 服务器上执行命令。有关更多信息,请使用 man 命令或 help 命令查看以下手册页:
$ man ssh
$ man bash