我不熟悉JSch。但是如果你有root权限,你可以更新你的sudoers配置文件来解决这个问题。添加下面一行到/ etc/sudoers文件
Defaults:USERNAME_HERE !requiretty
也许别人可以详细说明这是否是一个好主意或没有,这超出了我的知识范围,但我很想知道更多吗?
我只在一个特定的情况下使用这种方法。我们有一个通过rsync备份远程服务器集群的cronjob,但为了成功运行rsync,它需要sudo权限。
要解决这个问题,我做了以下事项
- 创建了一个用户“backupuser” - 在两台服务器上本地&远程
添加以下两行到/ etc/sudoers文件 - 只需在你想要为用户授予sudo权限的服务器。在我们的例子中,只在远程服务器上。
backupuser ALL = NOPASSWD: /usr/bin/rsync
DEFAULTS:backupuser !requiretty
添加上述两行授予用户,“backupuser”须藤权限rsync命令,而无需输入密码,没有必要的TTY连接。
以下是它的工作原理 -
第一行分为两部分。
USER SPECIFICATION OPTION_TAG (: CONDITIONS(opt))
用户规范 - 设置这些选项适用(S)也给用户。
backupuser
OPTION_TAG - 您要授予选项的标签。在这种情况下,用户被授予sudo权限而不必输入密码。 (见人sudoers的可用的标签列表)
ALL = NOPASSWD
条件 - 你也必须把关于何时授予须藤权限条件的选项。在这种情况下,用户只有sudo权限才能运行rsync命令。
: /usr/bin/rsync
第二行,覆盖您需要一个终端连接到运行须藤(TTY要求)sudo命令的默认要求。并且它仅将该特权授予用户帐户'backupuser'。 (见人sudoers的为其他默认设置)
DEFAULTS:backupuser !requiretty
希望这有助于解答您的问题。我知道它有一点切线,但我想给出一个完整的解释。对于更多的信息,你也可以结帐man sudo
这里在一个RHEL 6.3的实例,一切工作完美的setPty(true); – koppor 2012-08-21 16:00:13
你如何阻止伪终端?你使用简单的setPty(false)还是需要做别的事情? – waqas 2012-08-22 09:38:41