把密码传给sudo su

我想sudo到不同的用户后ssh'ing到远程服务器,为此,我尝试了以下内容:

cat remote-test.sh ssh -t -t [email protected] 'bash -s' << EOF /tmp/test.sh EOF 

当我从development-server.net执行remote-test.sh时,我想把ssh作为abcuser的test-server.net,然后用sudo作为xyzuser。

 cat /tmp/test.sh echo "password" | sudo -S su - xyzuser cd /tmp/some/directory 

有人可以请教如何在脚本中做sudo su时传递密码。

你设置无密码的SSH到本地用户xyzuserabcuser实现你想要的东西。 您需要将abcuser的公钥添加为xyzuser

那么当你作为abcuserlogin时,你可以这样做:

 ssh xyzuser@localhost do_something_as_xyzuser 

如果你阻止了ssh访问xyzuser ,只允许通过回送。 如果你使用的是linux,请参阅你的/etc/security/access.conf或相应的/etc/security/access.conf

使用su删除并使用正确的权限configurationsudo。 这涉及编辑/etc/sudoers并添加条目以允许用户在不提供密码的情况下执行命令。

你可以让它进步一点

 User_Alias SCRIPT_USER johndoe Cmnd_Alias SCRIPT_PATH /usr/local/bin/myscript.sh SCRIPT_USER ALL = NOPASSWD: SCRIPT_PATH 

或者用一条线获取同样的东西。

 johndoe ALL = NOPASSWD: /usr/local/bin/myscript.sh 

强烈build议你使用@pkhamre提供的解决scheme(正确configurationsudoers文件)。 这是最好的select,并给予pipe理员最大限度的控制。

如果这是不可实现的,那么我build议你使用@skjaidev(ssh authorized_keys)的解决scheme。 这并不要求您拥有pipe理权限,只能访问这两个帐户,因此可能适合更多的情况。

但是,如果由于某种原因,这些解决scheme都不适合您…

那么你想用这个期望 。 它可能已经在你的机器上了。 这是任何types的交互式命令行自动化的标准工具。