我想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到本地用户xyzuser为abcuser实现你想要的东西。 您需要将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的交互式命令行自动化的标准工具。