SSH 是 Linux 下进行远程连接的基本工具,不光可以登录,也可以远程操作。
一、执行简单的命令:
ssh root@127.0.0.1 "df -h"
一次执行多条命令,使用分号把不同的命令隔起来就 OK 了
ssh root@127.0.0.1 "df -h;pwd"
添加 -t 参数后,ssh 会保持登录状态,直到你退出需要交互的命令。
ssh -t root@127.0.0.1 "df -h"
二、保存远程执行命令结果:
赋值的方式:result=`ssh root@127.0.0.1 "df -h"`
追加到文件:ssh root@127.0.0.1 "df -h" >> ./log
三、执行本地的脚本
我们在本地创建一个脚本文件 test.sh:
然后运行下面的命令:
ssh root@127.0.0.1 < test.sh
通过重定向 stdin,本地的脚本 test.sh 在远程服务器上被执行。
该bash -s 命令的意思是“在新的 bash 会话中执行以下命令”。该-s 标志使其从标准输入读取,该< test.sh 位将本地脚本文件读入标准输入。该文件完全在本地读取,并且全部发送到远程服务器而无需上传任何内容。这确实需要您将所有命令放入一个单独的脚本文件中。
接下来我们期望能为脚本 test.sh 传递一个参数:
然后尝试执行下面的命令:
ssh root@127.0.0.1 < test.sh helloworld
ssh root@127.0.0.1 < "test.sh helloworld"
显示了执行的结果:方法都无法为脚本传递参数。
要想在这种情况下(远程执行本地的脚本)执行带有参数的脚本,需要为 bash 指定 -s 参数:
ssh root@127.0.0.1 'bash -s' < test.sh helloworld
在脚本中运行许多远程命令
如果您想在另一台服务器上运行 shell 脚本的一部分,而不是全部,您可以在脚本中包含如下嵌套块:
ssh user@remotehost 'bash -s' <<'ENDSSH'
# The following commands run on the remote host
echo "test"
cd /home/
pwd
ENDSSH
这是有效的,因为bash -s 期待任何类型的标准输入。该<<‘ENDSSH’ 指令创建了一个“here-document”结构,基本上将它和结尾“ENDSSH”之间的所有字符传递给标准输入,从而通过 SSH 传递给远程主机。
这样做意味着您可以将所有内容保存在一个脚本文件中,而不是创建一个新的脚本文件以在远程运行。
四、执行远程服务器上的脚本
除了执行本地的脚本,还有一种情况是脚本文件存放在远程服务器上,而我们需要远程的执行它!
此时在远程服务器中有一个脚本 test.sh。文件的内容如下:
执行下面的命令:
ssh root@127.0.0.1 "/home/test.sh"
注意,此时需要指定脚本的绝对路径!
下面我们也尝试为脚本传递参数:
然后尝试执行下面的命令:
ssh root@127.0.0.1 /home/test.sh helloworld
本文介绍了如何使用SSH在Linux系统中执行远程命令,包括一次执行多条命令、保存结果、执行本地和远程脚本,并详细阐述了如何为脚本传递参数以及在脚本中运行远程命令的方法。此外,还展示了如何在脚本中嵌套SSH命令来执行远程主机上的任务。
3341

被折叠的 条评论
为什么被折叠?



