我想在另一个EC2实例的远程EC2实例上创建一个文件夹,然后将一些数据复制到其中。
我尝试使用JSch创建文件夹并传递命令sudo mkdir /data
,但我得到的错误是sudo: sorry, you must have a tty to run sudo
。如果没有sudo,我也无法创建文件夹。我尝试使用((ChannelExec) channel).setPty(true)
并使用此我可以创建文件夹,但之后我无法复制任何数据甚至无法从命令行ssh EC2实例。(如果我手动创建文件夹然后成功完成复制数据) 。有人可以指导我应该采取什么方式。谢谢
答案 0 :(得分:0)
以下示例怎么样?
http://www.jcraft.com/jsch/examples/Sudo.java.html
答案 1 :(得分:0)
我不熟悉JSch。但是,如果您具有root访问权限,则可以更新sudoers配置文件以解决此问题。将以下行添加到/ etc / sudoers
Defaults:USERNAME_HERE !requiretty
也许其他人可以详细说明这是不是一个坏主意,这超出了我的知识范围,但我想知道更多?
我只在某种特定情况下使用此approcah。我们有一个通过rsync备份远程服务器集群的cronjob,但是要使rsync成功运行,它需要sudo权限。
为了解决这个问题,我做了以下事情 -
在/ etc / sudoers中添加了以下两行 - 仅在服务器上需要向用户授予sudo权限。在我们的例子中,仅在远程服务器上。
backupuser ALL = NOPASSWD: /usr/bin/rsync
DEFAULTS:backupuser !requiretty
添加这两行可以为用户授予rsync命令的“backupuser”sudo权限,而无需输入密码和没有所需的tty连接。
以下是它的工作原理 -
第一行分为两部分。
USER SPECIFICATION OPTION_TAG (: CONDITIONS(opt))
用户规范 - 这会为用户设置这些选项也适用。
backupuser
OPTION_TAG - 您要授予的选项的标记。在这种情况下,用户无需输入密码即可获得sudo权限。 (有关可用标签的列表,请参阅 man sudoers )
ALL = NOPASSWD
条件 - 您还可以选择何时授予sudo权限。在这种情况下,用户只有sudo权限才能运行rsync命令。
: /usr/bin/rsync
第二行覆盖sudo命令的默认要求,您需要终端连接来运行sudo(tty要求)。它仅将此权限授予用户帐户“backupuser”。 (参见 man sudoers 获取其他默认值)
DEFAULTS:backupuser !requiretty
希望这有助于回答您的问题。我知道它有点切线,但我想给出一个完整的解释。有关详细信息,您还可以结帐 man sudo