这篇文章将罗列几种使用SSH远程执行命令的方法。
假设 HOST 参数已经配置好了你的测试服务器信息。
单行命令
执行一个单行命令:
1 | ssh $HOST ls |
执行多个用;分割的内联命令 (inlined, separated with ;)
1 | ssh $HOST ls; pwd; cat /path/to/remote/file |
使用sudo权限执行命令
1 | ssh $HOST sudo ls /root |
sudo 需要与shell交互, 需要用 -t 参数开启
1 | ssh -t $HOST sudo ls /root |
简单的多行命令
1 | VAR1="Variable 1" |
shell 变量$VAR1将不会传递到远程命令中
可以带变量的多行远程命令
为了能够传递变量,我们使用bash -c 命令
1 | VAR1="Variable 1" |
在远程机器上执行本地脚本
可以简单的用stdin重定向实现
1 | cat script.sh |
1 | ssh $HOST < script.sh |
使用Heredoc远程执行多行命令
使用heredoc可能是最方便的远程执行多行命令的方式了。
而且支持代码块外的变量传递。
1 | VAR1="boo" |
如果需要在heredoc代码块内定义变量,那就在heredoc开始的标记上打上单引号
1 | ssh -T $HOST <<'EOSSH' |
如果出现以下的警告信息
1 | Pseudo-terminal will not be allocated because stdin is not a terminal. |
可以执行ssh命令的时候加上 -T 参数消除这个警告