1

別の EC2 インスタンスからリモート EC2 インスタンスにフォルダーを作成し、そこにいくつかのデータをコピーしたいと考えています。

JSch を使用してコマンドを渡してフォルダーを作成しようとしましsudo mkdir /dataたが、エラーが発生しましたsudo: sorry, you must have a tty to run sudo。sudo がないと、フォルダーを作成できません。使用しようとしまし((ChannelExec) channel).setPty(true)たが、これを使用してフォルダーを作成できますが、その後、データをコピーできず、コマンドラインから EC2 インスタンスを ssh することさえできません (フォルダーを手動で作成すると、データのコピーは正常に行われます)。誰かがそれを行う方法を教えてください。ありがとう

4

2 に答える 2

0

私はJSchに精通していません。ただし、root アクセス権がある場合は、sudoers 構成ファイルを更新してこれを回避できます。次の行を /etc/sudoers に追加します

Defaults:USERNAME_HERE !requiretty

他の誰かがこれが悪い考えかどうかについて詳しく説明できるかもしれませんが、それは私の知識の範囲を超えていますが、もっと知りたいですか?

私はこのアプローチを 1 つの特定の状況でのみ使用します。rsync を介してリモート サーバーのクラスターをバックアップする cronjob がありますが、rsync を正常に実行するには、sudo 権限が必要です。

これを回避するために、私は次のことを行いました-

  1. ユーザー「backupuser」を作成しました-ローカルサーバーとリモートサーバーの両方で
  2. 次の 2 行を /etc/sudoers に追加しました - ユーザーに sudo 権限を付与するサーバーでのみ必要です。私たちの場合、リモートサーバー上でのみ。

    backupuser ALL = NOPASSWD: /usr/bin/rsync
    DEFAULTS:backupuser !requiretty
    

これらの 2 行を追加すると、rsync コマンドの「backupuser」sudo 権限がユーザーに付与されます。パスワードを入力したり、必要な tty 接続を行ったりする必要はありません。

これがどのように機能するかです-

最初の行は 2 つの部分に分かれています。

USER SPECIFICATION OPTION_TAG (: CONDITIONS(opt))
  1. USER SPECIFICATION - これらのオプションが適用されるユーザーを設定します。

    backupuser
    
  2. OPTION_TAG - 付与するオプションのタグ。この場合、ユーザーにはパスワードを入力しなくても sudo 権限が付与されます。(使用可能なタグのリストについては、man sudoersを参照してください)

    ALL = NOPASSWD
    
  3. 条件 - いつ sudo 特権を付与するかについて条件を設定するオプションもあります。この場合、ユーザーには rsync コマンドを実行するための sudo 特権しかありません。

    : /usr/bin/rsync
    

2 行目は、sudo を実行するために端末接続が必要であるという sudo コマンドのデフォルトの要件 (tty 要件) をオーバーライドします。そして、この権限をユーザー アカウント「backupuser」にのみ付与します。(その他のデフォルトについてはman sudoersを参照してください)

DEFAULTS:backupuser !requiretty

これがあなたの質問に答えるのに役立つことを願っています. 私はそれが少し接線をたどったことを知っていますが、完全な説明をしたいと思いました. 詳細については、man sudoをチェックアウトすることもできます

于 2012-08-13T17:11:47.460 に答える
0

次の例はどうですか?

http://www.jcraft.com/jsch/examples/Sudo.java.html
于 2012-08-13T13:13:08.320 に答える