我想知道是否有一种方法可以从本地机器执行脚本/命令,而无需在远程机器上以 root 身份进行任何修改?
一些背景
我正在尝试通过 Capistrano 设置一些任务,但我需要sudo
访问权限。大约有 30 多台服务器,对我来说手动更新/etc/sudoers
会很痛苦,所以我想知道是否有一种方法可以远程更新此文件?
Cre*_*eek 19
您可以通过bash
在远程系统上执行并将脚本提供给它来远程运行本地脚本
$ ssh user@host 'bash -s' < script.sh
编辑
要执行需要sudo
在远程机器上使用ssh's
-t
的命令,请使用选项并将命令传递给ssh
. 该-t
选项分配一个伪 tty并允许用户与 运行的命令进行交互ssh
,例如输入密码sudo
$ ssh user@host -t 'sudo foo'
Run Code Online (Sandbox Code Playgroud)
sed
建议使用此方法修改文件而不是重定向,>
因为 shell 重定向在使用sudo
. 此外,sed
命令中的所有变量在传递给ssh
.
$ ssh user@host -t 'sudo sed -i "\$a text to insert" /path/to/file'
Run Code Online (Sandbox Code Playgroud)
自动化整个过程:
#!/bin/bash
SERVERS=( server1 server2 server3 )
for HOST in ${SERVERS[@]}; do
ssh user@${HOST} -t 'sudo sed -i "\$a text to insert" /path/to/file'
if [[ $? -ne 0 ]]; then
echo "ERROR: $HOST did not complete"
else
echo "$HOST complete"
fi
done
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
46451 次 |
最近记录: |