0

私の環境は、ノードサーバー(Rundeckサーバー)とノードターゲット(リモートSolarisホスト)の間のユーザー「マスター」に対してSSHパスワードなしの認証で構成されています。

/app/acme/stopApp.shTargetで、ユーザーと一緒にスクリプトを実行したいと思いますappmanager

通常、スクリプトを手動で実行する必要がある場合は、次を使用します。

ssh master@server sudo su - appmanager

または単に:

ssh -t master@server 'sudo su - appmanager'

これはパスワードなしで機能し、最終的に(appmanagerとして)実行されます:

/app/acme/stopApp.sh

しかし、Net::SSHを使用してこれらの手順を再現する方法を理解することはできません。実行sudo su - appmanagerしてから/app/acme/stopApp.sh、サブシェルで実行していますよね?

require 'rubygems'
require 'net/ssh'
require 'net/scp'
require 'crypt/blowfish'
require 'yaml'

#
# ...
#

Net::SSH.start( host, user, :password => password ) do |session|

  # It's possible to proceed in this way?
  cmd = 'sudo su - appmanager;/app/acme/stopApp.sh'  
  ses = session.exec!( cmd )

end

ターゲットサーバー上にいるようなものを実行しようとすると、次のことに気付きました。

sudo su -c /app/acme/stopApp.sh appmanager

以下のメッセージが表示されます。

We trust you have received the usual lecture from the local System Administrator. 

It usually boils down to these three things: 

 #1) Respect the privacy of others. 
 #2) Think before you type. 
 #3) With great power comes great responsibility. Password:

Password:
4

1 に答える 1

1

これは少しシステム管理者の答えですが、2回認証していると思います。1回目は「マスター」としてログインし(マスターのキーペアを使用)、2回目は「マスター」がsuを「appmanager」にsudoします。パスワードを使用します(したがって、「講義」メッセージ)。しかし、私はあなたが2回目のパスワードチャレンジに答えていないと思います。頭に浮かぶこれを回避するいくつかの方法があります:

1)そのアカウントのキーペアを使用してappmanagerとして直接ログインします。appmanagerアカウントのセキュリティが心配な場合は、特にsshリモートコマンドを制限できます

2)マスターとして、stopApp.shスクリプトを呼び出すだけの「appmanager」としてsetuidされたバイナリ(スクリプトではありません!)を呼び出します。例。_

3)マスターが所属する適切なグループを/ etc/sudoersのNOPASSWDに設定します。

于 2012-12-13T19:34:51.827 に答える