2016-09-12 14 views
-1

sshを使用してリモートホスト上で操作を実行する必要のあるWebサーバー(jetty)があります。サーバーはルートとして実行され、私はそれをそのままにしておきたい。Javaで別のユーザーとしてssh接続を実行

webServerマシンでは、rootとしてsudo -su user ssh [email protected]を実行できます。このコマンドは、 "user"をユーザとして使用してsshServerへのsshセッションを開きます。これは、ユーザーのssh-keysファイルを使用してsshセッションを開始し、パスワードを必要としないという点で良い点です。

Javaでこの操作を模倣したいと思います。私はいくつかのsshライブラリを使ってみましたが、動作させることができませんでした。別のユーザーとして接続しようとすると、ユーザーのパスワードを入力する必要があります。つまり、sshServerに「ユーザー」としてログオンするようJavaに依頼できますが、ssh接続コマンドを「ユーザー」として実行するようにJavaに依頼することはできません。私はキーファイルはssh-connection-commandを "user"として実行するときにのみ使用されると信じています。

ユーザーはsshServerにログオンするための私の指定ユーザーです。 root自身はsshキーファイルを持っておらず、sshServerにログオンできるのは登録ユーザーではありません。私は、コードやその他の難読化方法でユーザーのパスワードを保存しないようにしたいと思います。私はパスワードが何らかの危険にさらされる可能性のある他のユーザーを作成することもできません。

誰かがこの操作を実行するためのライブラリを知っていれば、私は感謝しています。

+0

あなたがしようとしましたJSCH? –

+0

確かに、それは私が現在使っているものです。それを動作させる方法がわかっている場合、簡単な例を教えてください。ありがとう! – soundwave

+0

大きなセキュリティホールを作成しているような感じです。私はあなたのマシン上のユーザーになりたくありません。つまり、javaには「su」/「sudo」機能はありませんが、セキュリティを気にせず、ユーザーが自分の秘密鍵をパスフレーズで保護していない場合は、あなたがJavaをrootとして実行しているので、ユーザ(あなたのライブラリをあなたの秘密鍵ファイルにコピーするかコピーするか)あなたはコードを表示していないので、あなたのケースでそれを行う方法を伝えるのは難しいです。 –

答えて

1

JSCH証明書ベースの認証:

JSch jsch = new JSch(); 

// Here privateKey is a file path like "/home/me/.ssh/secret_rsa " 
// passphrase is passed as a string like "mysecr" 
jsch.addIdentity(privateKey, passphrase); 

session = jsch.getSession(user, host, port); 
session.setConfig("StrictHostKeyChecking", "no"); 
// Or yes, up to you. If yes, JSch locks to the server identity so it cannot 
// be swapped by another with the same IP. 

session.connect(); 
channel = session.openChannel("shell"); 
out = channel.getOutputStream(); 
channel.connect(); 

HTH、

ギャル

関連する問題