SSH:远程切换用户并在该新用户下执行命令

SSH:远程切换用户并在该新用户下执行命令

我能够以用户身份使用公钥/私钥(无需密码)连接到远程计算机wakatana。在远程计算机上,我可以发出:sudo /usr/bin/rootsh -i -u root然后我输入 root 的密码并获得 root 的权限。现在我想“半自动化”这个过程。半自动化的意思是,我仍然需要传递 root 的密码,但我也可以传递将在 root 权限下执行的其他命令,例如cat /etc/shadow

我尝试了以下命令:ssh -t targetmachine "sudo /usr/bin/rootsh -i -u root; cat /etc/shadow"但这给了我交互式 root 的提示(在我输入密码后),并且我能够像以 root 身份登录一样使用远程计算机。只有在按下后,ctrl+d它才会尝试打开,/etc/shadow因为我收到以下消息:

cat: /etc/shadow: Permission denied
Connection to targetmachine closed.

我需要的是以某种方式将cat /etc/shadow命令传递给rootsh。但问题是我无法执行soduo/usr/bin/rootsh -i -u root

例如当我尝试时sudo /usr/bin/rootsh -i -u root -- cat /etc/shadow我得到了:

Sorry, user wakatana is not allowed to execute '/usr/bin/rootsh -i -u root -- cat /etc/shadow' as root on targetmachine.

总而言之,我需要的是

  1. 访问目标机器:
  2. 在远程服务器上将用户切换为 root(输入密码)
  3. 在切换的用户下执行命令
  4. 关闭与远程服务器的连接

请注意,我不允许:

  1. 编辑 sudoers 文件
  2. 将公钥/私钥添加到根目录
  3. 允许直接 root 登录

谢谢

编辑:

我也尝试过建议:

echo date | sudo /usr/bin/rootsh -i -u root

但它返回:

no tty/pty on stdin: Invalid argument

答案1

大多数 shell 会读取标准输入即使它不是键盘。看看这是否适用于targetmachine

$ echo date | sudo /usr/bin/rootsh -i -u root
[sudo] password for you: 
Mon Oct 14 13:29:09 EDT 2013

如果是这样,你可以看看是否使用标准输入通过 ssh 工作:

$ echo 'date ; whoami ; cat /etc/shadow' | ssh -t targetmachine 'sudo /usr/bin/rootsh -i -u root'

或者直接将命令发送到遥控器sudo

$ ssh -t targetmachine "echo 'date ; whoami ; cat /etc/shadow' | sudo /usr/bin/rootsh -i -u root"

注意正确嵌套单引号/双引号。(我的测试表明,sudo在上面的例子中,这不起作用,因为它无法读取我的本地终端获取密码。

答案2

绝对最不痛苦的解决方案是在远程机器上添加您的帐户,sudoers无需密码,然后可能限制您作为特权用户无需密码就可以执行哪些命令。

第一次尝试时遇到的直接问题是,你的命令将启动一个交互式 shell,并且然后仅在退出该 shell 后运行该命令。

无论是否将命令设为无密码,您要执行的命令是

ssh -t targetmachine "sudo /usr/bin/rootsh cat /etc/shadow"

在这个例子中,-i和选项似乎是多余的。-u root

如果您不允许通过此命令运行,则rootsh无法通过您提供的信息真正解决您的问题。

“无 tty” 问题发生是因为标准输入被重定向。这意味着你不能两个都管道命令并让其以交互方式提示您输入密码。您可能想尝试添加一个-t选项ssh(或多个选项!)但我不会抱太大希望。

答案3

这是一个示例命令,可用于将一行附加到远程计算机上的文件:

ssh -t user@remote "sudo sh -c 'echo \"your line here\" >> /path/to/your/file'"

上面的代码是我发现的这里这对我很有用。

相关内容