如何使用 SSH 运行/执行命令
SSH 客户端程序可用于登录远程计算机或服务器,并在远程计算机上执行命令。指定命令后,它将在远程主机/服务器上执行,而不是在登录 shell 上执行。让我们看看如何在 Linux、macOS、*BSD 或类 Unix 系统上使用 ssh 命令运行和执行命令。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 不 |
要求 | Linux 或 Unix 终端 |
类别 | 终端/ssh |
先决条件 | ssh 命令 |
操作系统兼容性 | BSD • Linux • macOS • Unix • WSL |
预计阅读时间 | 3 分钟 |
运行/执行命令 SSH 命令语法
通过 ssh 执行命令的语法如下:
ssh 客户端将登录到名为 server1 的服务器,使用名为 user1 的用户名并运行命令调用 command1。
$ ssh user1@server1 command1
$ ssh user1@server1 'command2'
# pipe #
$ ssh user1@server1 'command1 | command2'
# multiple commands (must enclose in quotes #
$ ssh admin@box1 "command1; command2; command3"
示例:通过 ssh 运行命令
获取远程服务器日期和时间:
ssh user1@server1 date
找出远程服务器磁盘空间使用情况:
ssh user1@server1 'df -H'
找出远程服务器内核版本和 Linux 发行版名称:
ssh root@nas01 "uname -mrs"
或者
ssh root@nas01 lsb_release -a
动图 01:使用 ssh 客户端运行命令
运行名为 /scripts/backup.sh 的脚本:
ssh operator@oracle1 '/scripts/backup.sh'
使用以下语法运行 sudo 或 su 命令:
## sudo syntax ## ssh -t user@hostname sudo command ssh -t user@hostname 'sudo command1 arg1 arg2' ## su syntax ## ssh user@nas01 su -c "/path/to/command1 arg1 arg2" # RHEL/CentOS specific # ssh user@nas01 su --session-command="/path/to/command1 arg1 arg2" ssh vivek@example.home.server su --session-command="/sbin/service httpd restart"
如果没有该-t选项,您将收到一条错误,内容为“ sudo:抱歉,您必须有一个 tty 才能在 Linux 和 Unix 上运行 sudo ”。
运行并执行多个 ssh 命令
使用cat 命令创建一个名为 command.txt 的新文件:
$ cat > commands.txt
附加您想要运行的命令:
date uptime df -H
接下来使用 ssh 命令从本地文件 command.txt 远程执行命令:
$ ssh server_name < commands.txt
$ ssh user@server_name < commands.txt
$ ssh admin@ls.backup <commands.txt
如何使用 shell 脚本运行多个 ssh 命令
多行命令语法如下,需要借助 bash 提供的 Here document 功能:
#!/bin/bash _remote="ls.backup" _user="vivek" echo "Local system name: $HOSTNAME" echo "Local date and time: $(date)" echo echo "*** Running commands on remote host named $_remote ***" echo ssh -T $_remote <<'EOL' now="$(date)" name="$HOSTNAME" up="$(uptime)" echo "Server name is $name" echo "Server date and time is $now" echo "Server uptime: $up" echo "Bye" EOL
运行脚本:
使用 bash 的 Heredoc 功能执行多行命令
总结
目的 | 句法 | 示例 |
---|---|---|
单行 ssh 命令 | ssh $user@$host command | ssh admin@ec2-server uptime |
执行多个命令 | ssh user@server "command1; command2; script1" | ssh vivek@linode-server "ls /etc/resolv.conf; date" |
使用 sudo 运行命令 | ssh -t user@host sudo command | ssh -t jobs@backup sudo /scripts/backup.sh |
从本地文件运行命令 | ssh user@hostname < file | cat cmd.txtdate ssh vivek@ls.www-db-1 < cmds.txt |
使用 Heredoc bash 功能 运行许多命令 |
ssh -T $HOST << EOL | ssh -T admin@freebsdnas << EOL |
当你需要分配变量时使用 Heredoc 的多行命令 |
ssh -T box1<<'EOL' | ssh -T vivek@server1<<'ENDSSH' |
$ man ssh