我能够以用户身份使用公钥/私钥(无需密码)连接到远程计算机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.
总而言之,我需要的是
- 访问目标机器:
- 在远程服务器上将用户切换为 root(输入密码)
- 在切换的用户下执行命令
- 关闭与远程服务器的连接
请注意,我不允许:
- 编辑 sudoers 文件
- 将公钥/私钥添加到根目录
- 允许直接 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'"
上面的代码是我发现的这里这对我很有用。