使用Jsch在远程EC2实例上创建文件夹

时间:2012-08-13 11:11:43

标签: java ssh amazon-ec2 jsch

我想在另一个EC2实例的远程EC2实例上创建一个文件夹,然后将一些数据复制到其中。

我尝试使用JSch创建文件夹并传递命令sudo mkdir /data,但我得到的错误是sudo: sorry, you must have a tty to run sudo。如果没有sudo,我也无法创建文件夹。我尝试使用((ChannelExec) channel).setPty(true)并使用此我可以创建文件夹,但之后我无法复制任何数据甚至无法从命令行ssh EC2实例。(如果我手动创建文件夹然后成功完成复制数据) 。有人可以指导我应该采取什么方式。谢谢

2 个答案:

答案 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权限。

为了解决这个问题,我做了以下事情 -

  1. 创建了一个用户“backupuser” - 在本地和服务器两台服务器上远程
  2. 在/ etc / sudoers中添加了以下两行 - 仅在服务器上需要向用户授予sudo权限。在我们的例子中,仅在远程服务器上。

    backupuser ALL = NOPASSWD: /usr/bin/rsync
    DEFAULTS:backupuser !requiretty
    
  3. 添加这两行可以为用户授予rsync命令的“backupuser”sudo权限,而无需输入密码和没有所需的tty连接。

    以下是它的工作原理 -

    第一行分为两部分。

    USER SPECIFICATION OPTION_TAG (: CONDITIONS(opt))
    
    1. 用户规范 - 这会为用户设置这些选项也适用。

      backupuser
      
    2. OPTION_TAG - 您要授予的选项的标记。在这种情况下,用户无需输入密码即可获得sudo权限。 (有关可用标签的列表,请参阅 man sudoers

      ALL = NOPASSWD
      
    3. 条件 - 您还可以选择何时授予sudo权限。在这种情况下,用户只有sudo权限才能运行rsync命令。

      : /usr/bin/rsync
      
    4. 第二行覆盖sudo命令的默认要求,您需要终端连接来运行sudo(tty要求)。它仅将此权限授予用户帐户“backupuser”。 (参见 man sudoers 获取其他默认值)

      DEFAULTS:backupuser !requiretty
      

      希望这有助于回答您的问题。我知道它有点切线,但我想给出一个完整的解释。有关详细信息,您还可以结帐 man sudo